Podczas próby przestrzegania ustalonych najlepszych praktyk, takich jak unikanie pojedynczych znaków, rejestru, właściwości statycznych i podstawowych kontrolerów, w jaki sposób mogę wypełnić mój układ (i częściowe elementy używane przez układ) danymi, które są używane tylko przez układ i często we wszystkich działaniach ?Jak zapełnić zmienne Zend_Layout danymi backendu?
Typowy scenariusz to menu zbudowane na zmiennych danych, takich jak baza danych. Mając na uwadze rozdzielenie obaw, widoki/układ nigdy nie powinny bezpośrednio rozmawiać z backendem, ale raczej powiedziano, co należy zawrzeć.
Używanie wtyczki kontrolera frontowego jest po prostu niemożliwe bez użycia pojedynczej "funkcji" w Zend_Layout. Wtyczka zna tylko obiekt żądania i odpowiedzi, nie ma dostępu do kontrolerów, widoków ani układu.
Pomocnicy akcji Zenda mają metody init/preDispatch/postDispatch. Do HelperBroker można dodać pomocników akcji (np. Za pomocą bootstrap), które będą wykonywane w normalnym przepływie aplikacji.
Użycie metody init do wprowadzania danych do widoku nie jest możliwe, ponieważ jest wyzwalane, zanim kontroler/widok będzie gotowy. preDispatch/postDispatch jest możliwy, ale nie idealny, ponieważ metody te są zawsze wywoływane podczas wykonywania akcji kontrolera.
Oznacza to, że wszystkie zastosowania Zend_Controller_Action :: _ forward() będą również wykonywać preDispatch/postDispatch we wszystkich pomocnikach akcji. Nie ma to dużego wpływu na kod, z wyjątkiem prędkości, naprawdę nie chcę ustawiać zmiennej widoku (lub pomocnika widoku) kilka razy. Można kodować wokół tego problemu za pomocą jakiejś zmiennej $ firstRun, ale naprawdę nie chcę tego śledzić we własnym kodzie.
Inna metoda robi to w bootstrapie, ale moim zdaniem to naprawdę nie pasuje do tego.
W jaki sposób mogę wypełnić mój układ/widok pomocnika danymi z bazy danych, robiąc to tylko raz i nadal zachowując dobry rozdział obaw?