Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework]Helper widoku
Forum PHP.pl > Forum > PHP > Frameworki
Oczko21
Witam,
Mam kilka pytań które nurtują mnie w Zendzie, a jako że dopiero zaczynam swoją przygodę z tym frameworkiem to chciałbym od początku uczyć się dobrych nawyków.
1. Jakie rozszerzenie powinny mieć helpery widoków- php czy phtml? Sprawdzałem oba rozszerzenie i helpery działają tylko z rozszerzeniem php, ale wole się upewnić smile.gif
2. Chciałbym aby ktoś skomentował czy poniższe rozwiązanie prawidłowo zrobiłem.

Helpera mam w takim katalogu views/helpers/submenuHelper.php, następnie z tego co wyczytałem w dokumentacji to wywołanie helpera odbywa się w pliku widoku, czyli np. views/scripts/index/index.phtml. W tym widoku wywołuje go tak:
  1. <?php
  2. echo $this->submenuHelper();
  3. ?>

I w layout.phtml wywołuje tą zmienną tak:
  1. <?php
  2. echo $this->zmienna;
  3. ?>

I tutaj zaczynają się problemy, próbowałem wywołać dane z helpera na 3 różne sposoby, ale tylko dwa z nich działają. Klasa helpera wygląda tak:
  1. <?php
  2.  
  3. class Zend_View_Helper_SubmenuHelper extends Zend_View_Helper_Abstract {
  4.  
  5. public function submenuHelper()
  6. {
  7. // 1 sposób- działa
  8. //$this->view->zmienna = 'Teeeest';
  9. //return $this->view->zmienna;
  10.  
  11.  
  12.  
  13. // 2 sposób- działa
  14. //$this->view->zmienna = 'Teeeest';
  15. // return $this->view->render('index.phtml');
  16.  
  17.  
  18.  
  19. // 3 sposób- nie działa
  20. return $this->view->partial('index.phtml', array('zmienna' => 'Teeeest'));
  21. }
  22.  
  23. }
  24.  
  25. ?>

3. Dlaczego 3 sposób nie działa? Gdy w layout.phtml sprawdzam co zwrócił var_dump zmiennej zmienna wyświetla że null?

4. Czy dobrze rozumiem to że w 2 i 3 sposobie przekazuje widok w którym wywołałem helpera tak? Czy jakiś 'trzeci' widok?

5. Helpery widoków służą do łączenia kodu php z kodem HTML? Tzn. czy w nich mogę umieszczać instrukcje warunkowe itp?


Teraz jeszcze mam pytania nie związane z helperami, mianowicie:
6. W książce z której się uczyłem Zenda, autor napisał:
"models/ - Klasy warstwy M zapewniające dostęp do bazy danych"
Czy to znaczy że modele są odpowiedziane tylko za dostęp do bazy danych? W takim razie gdzie powinienem obrabiać dane nie związanie z bazą danych? W kontrolerach?

7. Translacja adresów w Zendzie wygląda tak:
kontroler/akcja/zmienna1/wartosc1/zmienna2/wartosc2
Czy można inaczej ustawić adresy? Np. żeby ostatnia wartość z adresu strony wskazywała na kontroler?

8. Czy istnieje jakaś inna dokumentacja poza tą na stronie Zenda? Jak dla mnie napisana jest ona dosyć chaotycznie i trudno znaleźć to czego się szuka. Najlepszym rozwiązaniem byłby zbiór wszystich klas z wypisanymi metodami i krótkim ich opisem.


Z góry dziękuję za podzielenie się swoją wiedzą.
droslaw
1. Rozszerzenie phtml mają tylko szablony, kod partiali, placeholderow.
Helpery tylko php.

2. Prawidłowo powinno być tak że:
- echujesz coś w szablonie np: echo 'Teeest';
- i w layoucie masz do tego dostęp przez wywołanie $this->layout()->content;
czyli:
  1. <?php
  2. // index.phtml
  3. echo 'Teeest';
  4. ?>

  1. //..
  2. // layout.phtml
  3. echo $this->layout()->content;
  4. // ...

Helpera możesz wywołać też w layoucie.

3. Wg mnie żadna metoda nie powinna zadziałać chyba, że masz w helperze metodę setView i w niej przypisujesz do pola $this->view obiekt widoku. Wtedy pole view w helperze to właśnie widok utworzony w kontrolerze. Layout ma również dostęp do tego samego obieku, dlatego 1 sposób działa.
Drugi działa bo robisz w nim to samo co w pierwszym czyli :
  1. $this->view->zmienna = 'Teeeest';

wywołanie tylko:
  1. return $this->view->render('index.phtml');

powinno dać taki sam efekt jak trzecia metoda.

Widok szuka sobie szablonów w katalogu views/scripts/, dlatego 2 ostatnie podejścia nie przyniosłyby efektu.
Nawet gdy dasz:
  1. return $this->view->render('index/index.phtml');

to w helperze renderujesz szablon, który wywołuje właśnie ten helper i tak w kółko tongue.gif.

4. Użyty jest pewnie inny szablon (views/scripts/index.phtml), ale piszę to na podstawie mojej wiedzy o zend framework 1.11.

5. Możesz. Helpery widoku powinny zwracać tekst, który wyświetlisz w szablonie/layoucie, pozatym to zwykły kod php.
Ale nie uzywaj helperów po to, żeby zwracać kod całej strony, tylko fragmenty. Praykładem jest helper escape, ja sobie zrobiłem np. helper markdown, który zamienia kod markdown na html i filtruje HTMLPurifierem. Podane przez Ciebie wyżej rozwiązanie nie jest dobre.

6. Z modelu masz dostęp m.inn. do bazy danych. Oprócz niej mogą być inne źródła danych.

7. Nie wiem czy dostęne routery dają taką możliwość, ale zawsze możesz napisać swój.

8. Ja się uczyłem głównie ze strony Zenda. Oprócz tego tutoriale na necie np: http://devzone.zend.com/.
viking
I w przypadku ZF przydaje się przejrzeć kod samego frameworka o czym jeszcze wiele razy będziesz miał okazję się przekonać smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.