![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 359 Pomógł: 12 Dołączył: 16.01.2009 Ostrzeżenie: (0%) ![]() ![]() |
Otóż mam taki problem. Jest sobie klasa widoku HTML (w odróżnieniu od np. XML)
I w szablonie jest coś takiego
Ale niestety to wywala błąd: Cytat Fatal error: Using $this when not in object context in [ścieżka]\views\html\templates\default\default.html on line 6 Czy da się to jakoś załatwić, żeby informacje były wyciągane bezpośrednio z widoku? Czyli innymi słowy, żeby nie było tego błędu i wszystko działało :-) ? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 568 Pomógł: 192 Dołączył: 7.03.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
$this stosujesz poza klasą? Nie widzę, żebyś tworzył nową instancję klasy
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 359 Pomógł: 12 Dołączył: 16.01.2009 Ostrzeżenie: (0%) ![]() ![]() |
Jest jeszcze kontroler czy coś takiego articles.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 180 Pomógł: 37 Dołączył: 1.05.2008 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
Nie da się, starasz się wywołać obiekt z poziomu metody statycznej. Są 2 obejścia problemu (przynajmniej takie o których wiem (IMG:style_emoticons/default/smile.gif) ).
Po pierwsze rozwiązanie niezbyt dobre, możesz w metodzie statycznej utworzyć kod PHP (w Stringu) w którym tworzysz klasę która dziedziczy po klasie html, natomiast w konstruktorze tej klasy umieścić kod z szablonu. Potem inicjujesz taką klasę i po sprawie. Oczywiście ten kod PHP wykonujesz w klasie statycznej za pomocą evala. Drugie rozwiązanie jest o niebo lepsze - możesz z klasy Core zrobić Singletona, umieścić tam kod metodę magiczną __call która będzie sprawdzała czy dana metoda należy do klasy html i w razie czego ją wywoływał. Oczywiście w takim przypadku w loadFile trzeba będzie przesyłać obiekt klasy html aby klasa Core mogła sprawdzić czy dana metoda znajduje się w klasie i ewentualnie ją wywolać. Metoda show będzie wtedy wyglądała tak:
W ogóle na Twoim miejscu zastanowiłbym się czy jest jakiś sens korzystania w tym przypadku z Core, nie możesz dołączyć kodu szablonu bezpośrednio w metodzie show? |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 359 Pomógł: 12 Dołączył: 16.01.2009 Ostrzeżenie: (0%) ![]() ![]() |
Zapomniałem wspomnieć, że loadClass to tylko loadFile, oraz sprawdzenie, czy klasa istnieje.
Nie wiem tylko, czy wywoływanie z szablonu danych strony z obiektu (czyli używanie $this->content) jest ogólnie nie możliwe, czy to ja gdzieś popełniłem błąd. Bo mam ochotę napisać wszystko od początku. Powód? Nie trzyma się metody KISS i to w takim stopniu, że sam się gubię (IMG:style_emoticons/default/biggrin.gif) |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 180 Pomógł: 37 Dołączył: 1.05.2008 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
Jeśli wczytujesz szablon z poziomu metody obiektu to nie ma problemu z używanie $this, Twój błąd ewidentnie świadczy o tym że robisz to gdzieś gdzie nie masz dostępu do $this (czyli pewnie w metodzie statycznej).
Kod z szablonu nie musi być nawet wykonywany bezpośrednio w klasie do której chcesz uzyskać dostęp do metody/pobrać zmienną o ile złapiesz metodę za pomocą __call (lub analogicznie zmienną za pomocą __get) i przekierujesz ją do poprawnej referencji do obiektu. Najlepiej gdybyś wrzucil wycinek kodu w którym następuje wczytanie szablonu, wtedy prawdopodobnie będzie można znaleźć jakieś obejście (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 359 Pomógł: 12 Dołączył: 16.01.2009 Ostrzeżenie: (0%) ![]() ![]() |
Zazwyczaj to było robione w ten sposób, (loadFIle jako loadTemplate)ale zrobiłem do widoku własną funkcję i jest spoko, dzięki :-) Ten post edytował Asmox 2.09.2010, 20:24:55 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 28.09.2025 - 15:03 |