Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF][ZF2] Sterta pytań początkującego
Forum PHP.pl > Forum > PHP > Frameworki
Wasper
Czesc.
Postanowilem zalozyc ten temat, poniewaz na poczatku mojej przygody z ZF2 rodzi sie wiecej pytan niz odpowiedzi smile.gif
Dlatego, zeby nie mnozyc tematow, bede otwieral poszczegolne 'pytania' tutaj i zamykal po uzyskaniu odpowiedzi (przez kogos lub przez siebie tongue.gif ).
Jezeli moge to prosilbym o wylacznosc w zadawaniu pytan, bo nie chce, zeby zrobil sie tutaj smietnik.
A wiec


*** PYTANIE 1 ***

Cel: globalne elementy widoku

Wezmy taki przyklad. Mamy strone na ktorej jest u gory jakas belka z menu. W zaleznosci od modulu moze sie ona roznic "aktywnym" elementem.

Mamy 2 moduly: Application i Test, 2 kontrolery i 2 systemy plikow.
I teraz: w module Application tworze 2 pliki widoku:

upMenu.phtml

  1. <div class="navbar navbar-inverse navbar-fixed-top">
  2. <div class="navbar-inner">
  3. <div class="container">
  4. <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
  5. </a>
  6. <a class="brand" href="<?php echo $this->url('home') ?>"><?php echo $this->escapeHtml('EasyApp'); ?></a>
  7. <div class="nav-collapse collapse">
  8. <ul class="nav">
  9. <li <?php echo ($active == 1 ? 'class="active"' : ''); ?>><a href="<?php echo $this->url('home') ?>"><?php echo $this->translate('Strona główna') ?></a></li>
  10. <li <?php echo ($active == 2 ? 'class="active"' : ''); ?>><a href="<?php echo $this->url('test') ?>"><?php echo $this->translate('Test') ?></a></li>
  11. </ul>
  12. </div>
  13. </div>
  14. </div>
  15. </div>


i powiedzmy footer (to juz malo wazne).
Jak widac w upMenu przykladowo w zaleznosci od zmiennej $active aktywujemy ktorys z elementow menu.

Teraz w Application w konstruktorze kontrolera IndexController definiujemy zmienna view, ktorej przypisujemy ViewModel(). Wyglada to tak:

  1. class IndexController extends AbstractActionController
  2. {
  3. protected $view;
  4.  
  5. public function __construct() {
  6. $this->view = new ViewModel();
  7.  
  8. $menuBar = new ViewModel();
  9. $menuBar->setTemplate('application/index/upMenu.phtml');
  10. $menuBar->setVariables(array('active' => 1));
  11.  
  12. $this->view->addChild($menuBar, 'menu');
  13. }
  14. public function indexAction()
  15. {
  16. return $this->view;
  17. }
  18. }


I wszystko ladnie gra po wejsciu na strone 'glowna'.
Ale teraz czas na zmiane modulu i tu jest problem, jak sie dostac z modulu Test do upMenu.phtml

  1. Requested scripts may not include parent directory traversal ("../", "..\" notation)


... juz wiem, ze tak sie nie da smile.gif

Myslalem, zeby umiescic ta belke w layoucie, ale jak przekazac (czy w ogole sie da) zmienna do layoutu, bo jedyne co tam jest to $this->content;
Czy da sie zrobic "globalne" elementy widoku? Jak je zdefiniowac i gdzie?


**** ODPOWIEDZ NA PYTANIE ****

Sam rozkminilem smile.gif
Dla potomnosci smile.gif

stworzylem sobie w "/" Folder View a w nim folder Templates gdzie umiescilem UpMenu.phtml

nastepnie w pliku konfiguracyjnym obydwu modulow Application i Test dodalem

  1. 'template_map' => array(
  2. 'application/upMenu' => 'View/templates/upMenu.phtml', //linia dodana
  3. ),


po czym dokonalem zmiany w konstruktorze na juz zdefiniowany element widoku

  1. $menuBar->setTemplate('application/upMenu');


Ot cala filozofia smile.gif
Koniec pytania, uwagi przyjme smile.gif

*****************************

****** PYTANIE NR 2 **********

Cel: logowanie, autoryzacja.
Staram sie rozkminic jak to ugryzc, ale nie moge nic wymyslec realnego poki co.
Ok, w konstruktorze mozna sprawdzac autoryzacje (czy sesja nie wygasla, czy sesyjne userid ma odniesienie w bazie), jezeli nie to mozna albo zrobic przekierowanie, albo po prostu zmienic widok smile.gif
Ale jak i gdzie rozpisac sama autoryzacje.
Chodzi mi o model z autoryzacja, bo przydaloby sie, zeby byl tak samo gobalny jak widoki z wczesniejszego tematu... tylko gdzie taki widok umiejscic? Czy zrobic osobny modul, ktory nazwac np Authorisation i tam wsadzic i widok 'nologged' i model, w przypadku niespelnienia warunku autoryzacji przekierowywac wlasnie tam?
a w innych modulach includowac np Authorisation\Model\Authorisation??
piasekps
Czesc

Moza ta strona Tobie jakos pomoze, naprowadzi do celu.
Wasper
Dzieki, napewno pomoze.
Przydalby mi sie opis ogolego dzialania zenda2, czyli tak ogolnie co gdzie i jak. Bo mieszam sie z tymi plikami konfiguracyjnymi.
Np co do rzeczy ktore chcialbym, zeby startowaly przy kazdym uruchomieniu skryptu.. np sprawdzanie autoryzacji, to ma sie dziac po kazdym przeladowaniu na samym poczatku niezaleznie od modulu... i tu zagwozdka.. gdzie to umiescic, zeby bylo globalne.. i dzialalo globalnie
amii
Niedawno w sumie to dzisiaj wink.gif popełniłem na swoim blogu wpis na temat logowania i kontroli uprawnień w Zend myślę, że to dobra odpowiedź na Twoje drugie pytanie
Wasper
Ano dzisiaj smile.gif Ok, tylko mnie interesuje dwojka, ale owszem, poczytac nie zaszkodzi.
Tez sie zastanawialem na tym, zeby stworzyc glowny nadrzedny kontroller i zeby cala reszta nie dziedziczyla po Abstrakcyjnym zendowym tylko wlasnie po nim. A w tym kontrolerze np w konstruktorze umiescic autentykacje.. albo i nie. Nie wiem, blakam sie troche jeszcze, za duzo rzeczy do ogarniecia..

edit.
ciekawi mnie jeszcze jedna rzecz.
Gdybym chcial, zeby cos sie "globalnie" wykonywalo w module, to mam od tego Module.php (przykladowo http://lab.empirio.no/how-to-attach-mvc-events-in-zf2.html)
A gdybym chcial cos zrobic globalnie w aplikacji?? niezaleznie od modulu?? to co wtedy?
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.