Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF] Powtarzające się elementy "moduły" aplikacji
Forum PHP.pl > Forum > PHP > Frameworki
MarcinTryka
Witam

Mam problem z pisaniem wiekszych aplikacji w ZF. Np. Logowanie. Wszedzie w tutorialach, poradnikachh jest to rozwiazane tak: budujemy
LogujController
- ZalogujAction
- WylogujAction
- FormularzAction
- HelloAction

I wchodze zeby sie zalogowac na strone www.adresdtrony.pl/loguj/formularz/

... tylko kto tak robi. Z reguły na jednej stronie w wiekszych serwisach jest cała masa róznych rzeczy, a nie jedna strona do jednego.
Dajmy na to że mam strone.

Po lewej mam boxy z róznymi rzeczami (menu, formularz logowania/informacje o zalogowanym, ostatnie wiadomosci z forum itp ...).
Po prawe mam to co zależy od wybranej strony, czyli np. Forum, Strona główna, Aktualności, Ogłoszenia...

Czyli mam takie kontrollery jak ForumController. AktualnosciController ...

Jak to zintegrować? Żeby się wszystko ładnie razem wyświetlało i żebym nie musiał w 10 kontrolerach powtarzać tego samego kodu dotyczącego logowania.

A już ideałem by było żebym mógł np. w bazie zapisać kolejność takich boxów w menu, każdemu przyporządkować jakis moduł, trzymać to w bazie danych, a przy uruchomieniu aplikacji tylko odczytywać z bazy kolejne moduły i dołączać odpowiednie kawałki kodu. Jesli chodzi o widok, to sobie poradze, nie wiem natomiast jak w jednym kontrolerze uzyć drugiego? . W tradycyjnym programowaniu to banalne, a ZF (lub raczej moja niewiedza) mnie tu ogranicza.

Chcę budować aplikacje (wortal) który będę z cały czas rozbudowywał. Takie "modułowe" podejście bardzo ułatwiłoby mi dodawanie nowych funkcji. oraz zarządzaniem istniejącymi

Proszę o radę lub jakieś linki.
LBO
W ZF stworzyłem podwaliny pod prawdziwą aplikację - czyli obsługę błędów, zarządzanie plikami konfiguracji, połączenie z bazą danych, logowanie i administrację. Teraz wszystko się sprowadza do developerki modułów. W pewnym momencie natknąłem się na Twój problem - tak naprawdę to natychmiast, gdyż miałem doświadczenie np. Z CakePHP - i rozwiązałem go za pomocą helperów (lub wg nieszczęsnego tłumaczenia manuala - pomocników) widoku. Dodatkowo posiadam autorski sposób dodawania layoutów jako plugin do front controllera (kontrolera frontowego, bleh). Pluginy takie, to zdecydowanie najbardziej niedoceniona przez społeczność i twórców ZF część frameworka.
Cysiaczek
NIe jestem pewien, czy nie palnę głupoty, bo ZF znam tylko z opisu, kodu który czytałem i dokumantacji. W ZF jak i w innych tego typu frameworkach (CI, Cake) - możesz to zrobić tylko siłowo - czyli dołaczyć widok ( tzw partial) do widoku głównego bezpośrednio w jego kodzie. Niestety nie istnieje żaden mechanizm zarządzania logiką tych dołączeń (np. wykonywanie kodu akcji).

Pozdrawiam.
eai
Widać mało znacie ZF.

Oprócz widoków możemy tworzyć layouty w których umieszczasz swoje boxy, i zamiast po 10 razy przepisywać kod, tworzysz sobie helper który może Ci generować zawartość innego kontrollera, w helperze poprostu dajesz dispatch, określasz trasę parametry a na koniec getBody, dzięki temu łączysz się z jakim chcesz kontrolerem i z jaką chcesz akcją. Przyczym loginka aplikacji jest zachowana czyli MVC. Dzięki ustalonej trasie routera i odpowiednich parametrów generują Ci się odpowiednie boxy, czyli np. jeśli jesteś zalogowany wyświetli Ci się panel konta, a jeśli nie to box z formularzem logowania.
Chwilowo Zend_Layout jest jeszcze w incubator ale ja go używam i narazie nie ma żadnych problemów z layoutami.

Warunki parametrów sprawdzasz sobie w kontrolerze, a helper będzie Ci służył jedynie do łączenia się z innym kontrolerami i pobieraniem odpowiedzi.

ZF to naprawdę świetny framework, warto mu się głębiej przyjżeć.

Zacznij od tego http://framework.zend.com/apidoc/core/.

Jeśli nadal nie będziesz wiedział co i jak, to daj znać na priv a wstawie na bloga artykuł o tym.
LBO
@eai kto się nie zna, ten się nie zna tongue.gif Jeżeli nie zauważyłeś napisałem o wszystkim o czym Ty wspomniałeś, nie wiem na jakiej podstawie wątpisz w moją wiedzę? Z ZF "znam się" praktycznie od początku - bodajże 0.1.1.

Pozdrawiam, LBO.


P.S. Zend_Layout w inkubatorze? No chyba nie każesz nikomu tego używać?
eai
@LBO sorki bo pominąłem twój wątek. faktycznie to jest to samo smile.gif
/sorka i bez urazy smile.gif
LBO
Co do Zend_Layout, rozumiem, że zdobyłeś gdzieś kod? Przejrzałem pobieżnie Nabble i wiki, ale nie znalazłem.

Podzieliłbyś się linkiem snitch.gif
eai
Zend_Layout: zip / zip
Przykłady różnego użycia: zip / rar

A potem możesz jako plugin lub w bootscrapie, nie wiem jak to masz napisane każdy piszę jak lubi winksmiley.jpg
  1. <?php
  2.  
  3.  $view = new Zend_View();
  4. // ustalasz sobie co tam chcesz w widoku, zresztą co Ci będę tłumaczył widać że zn
    asz się na rzeczy :)
  5.  
  6.  
  7. Zend_Layout::setPath('../application/layouts');
  8. Zend_Layout::setDefaultLayoutName('stronaglowna');
  9. Zend_Layout::setView($view);
  10.  
  11. //Potem w kontrolerze jakimś jeśli używasz innego layoutu niż domyślny poprostu w 
    init() dajesz:
  12. $this->_helper->layoutManager->setLayoutName('podstrona');
  13.  
  14.  
  15.  //Wyłączenie layoutu i wyświetlanie tylko tego co wygenerował nam kontroller akcji
  16.  $this->_helper->layoutManager->disableLayouts();
  17.  
  18.  
  19.  // W application/layouts/stronaglowna.phtml tam gdzie chcesz wstawic tresc wygenerowanego kontrolera wsta
    wiasz:
  20.  echo $this->content; 
  21. ?>


A tutaj link skąd wszystko wziąłem: http://framework.zend.com/wiki/display/ZFP...CommentId=38281
Ozzy
Ja także rozwiązałem ten problem używając Zend_Layout, zaproponowałem także autorowi pewnie ulepszenia. W tej chwili Zend_Layout jest przepisywany na nowo, co nie oznacza, że nie można używać wersji 1.4, która sprawuje się bardzo dobrze.
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.