Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MVC] Owieranie kontrolerów w środku innego.
webdice
post
Post #1


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Na początek sory za temat ale nie bardzo wiem jak to nazwać. Nie wiem jak rozwiązać mój problem, a mianowicie mam index i chce zrobić menu (w indexie), ewentualnie część prawą, lewą i jakąś stopkę i tu moje pytanie jak wy to rozwiązujecie w waszych frameworkach. Najbardziej bym chciał mieć np application.Controller.php (w nim zawarte jakieś akacje odnośnie indexu) i inne kontrollery, np news.Controller.php, ogolnie chodzi o to jak includować newsController w applicationController. Ja widze tylko takie rozwiązanie: w odpowiednim miejscu w pliku z szablonem wstawić coś typu

Kod
forward ('controller', 'akcja')


ale takie rozwiązanie nie bardzo mi się podoba, tak samo nie chciałbym dzielić indexu na górną i dolną cześć.\

Pozdrawiam Piotrek.

Ten post edytował webdicepl 29.05.2007, 11:34:57
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
splatch
post
Post #2





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

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


Wywoływanie kolejnych kontrolerów w celu dekorowania widoku nie jest złe, ale z pewnością kłopotliwe. Zwykle filter chain jest już zainicjowany a akcja jako taka jest jego ostatnim elementem wiec dorzucanie kolejnych rzeczy wiąże się zawsze z problemami. Na przykład renderowanie dwóch różnych stron może przebiegać w następujący sposób:
Kod
... filter chain > admin > menu > footer

Kod
... filter chain > frontend > menu > cart > orders > footer

Menu jest stałe, ale renderowanie pozostałych elementów zależne od różnych czynników. Aby uzyskać interesujący efekt konieczne byłoby ręczne konfigurowanie łańcucha w każdej akcji, co zdecydowanie wygodne nie będzie.

W Agavi, Symfony, Mojavi 4 i inne frameworki, które wywodzą się z Mojavi 2/3 a mają wyodrębnioną obsługę widoków wspierają forwardowanie akcji oraz, jak mi się wydaje, rozwiązanie Twojego problemu - mianowicie layouty.

Wygląda to tak, że definiuje się układ, komponenty, które wchodzą w jego skład (menu, stopka, jakieś dodatkowe bloki) i nadaje mu nazwę - powiedzmy "front", "admin", "product", "category" i tak dalej. Każdy z nich różni się przy produktach dorzucamy od razu komentarze i galerię. W widoku danej akcji wystarczy wywołać metodę setLayout(nazwa) by zmienić układ. W sloty wskoczą wyniki wykonywania danych akcji.
Logika bez zmian, widok bardziej elastyczny a i jego zmiany nie wpływają na warstwę biznesową.

Forwardy są przeznaczone do wpięcia pewnego fragmentu uniwersalnej logiki - takich sytuacji jest tak na prawdę niewiele, ponieważ jeśli coś powtarza się często, powiedzmy logowanie operacji wygodniej jest to wrzucić do filtru, zatem forwardy głównie sprowadzają się do zrobienia redirecta, stąd w Agavi od wersji 0.11 forwardy nie są dostępne, w ich miejsce można robić "mini forwardy" na widoki.
Go to the top of the page
+Quote Post

Posty w temacie


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: 16.01.2026 - 07:09