Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZF] Zmienne w kontrolerze dostępne we wszystkich akcjach
d_hrabia
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 7.01.2011

Ostrzeżenie: (0%)
-----


No właśnie mam taki problem - dlaczego zmienne klasy kontrolera nie są dostępne we wszystkich akcjach?
Przykład:

Controller
  1. class JakisController extends Zend_Controller_Action
  2. {
  3. public function init()
  4. {
  5. $this->test=null;
  6. }
  7. public function pierwszaAction()
  8. {
  9. $this->test="wiadomosc";
  10. }
  11. public function drugaAction()
  12. {
  13. $this->vew->test=$this->test;
  14. }
  15. }


I przechodzac z akcji pierwsza do druga, oraz wyświetlając w widoku akcji druga zmienną $test nie wyświetla się nic.
Może mi ktoś to łopatologicznie wytłumaczyć? (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
batman
post
Post #2





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




1. Jesteś w akcji pierwsza. Metoda init ustawia właściwość test na null, akcja na wiadomosc.
2. Jesteś w akcji druga. Metoda init ustawia właściwość test na null, akcja pobiera właściwość z wartością null.

Jeśli byłoby tak, że akcja druga wykona się w tym samym requeście co pierwsza, wówczas właściwość zawierałaby pożądaną wartość. To są podstawy obiektówki. Zanim weźmiesz się za ZF, zacznij od nauki programowania obiektowego.
Go to the top of the page
+Quote Post
krowal
post
Post #3





Grupa: Zarejestrowani
Postów: 561
Pomógł: 72
Dołączył: 15.11.2006

Ostrzeżenie: (0%)
-----


Po pierwsze to masz błąd w kodzie, jest 'vew' powinno być 'view'. A po drugie, chodzi tutaj o to, że wszystko co było w pamięci przy wywołaniu akcji 'pierwsza' zostaje wymazane od razu po wykonaniu się kodu. Język PHP nie zapamiętuje zmiennych, obiektów (i ich składowych) przechodząc pomiędzy wywołaniami strony. Aby mieć coś w zmiennej składowej test musisz wykonać metodę, która ją zmieni czyli teoretycznie w metodzie drugaAction() powinieneś wywołać pierwszaAction() i topiero odwoływać się do zmiennej test. Jakby nie było do tego powinieneś raczej użyć odrębnej metody, która ci tą zmienną zmieni a nie metody, która jest przeznaczona do wykonania całej akcji użytkownika (wszystkie metody typu xxxAction()).
Go to the top of the page
+Quote Post
d_hrabia
post
Post #4





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 7.01.2011

Ostrzeżenie: (0%)
-----


Dzięki, sporo mi to rozjaśniło... Bo nawet jak wyrzucałem zmienną $test poza init'a to efekt był ten sam... Dziwi mnie jedynie to, że nawet zmienne całej klasy kontrolera nie są zapamiętywane i następnie dostępne w kolejnej akcji - a szkoda.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 04:44