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.