Tak. Zaczęłam miesiąc temu swoją przygodę z Symfony. Długo trzymałam się z daleka od tego frameworka. Dziś właściwie nie wiem z jakie były powody mojego postępowania. Życie mnie przymusiło, żeby się jednak z nim zapoznać i prawdę mówiąc, nie żałuję. Oczywiście nie ma dnia, żebym nie zmagała się z zupełnie nowymi dla mnie zagadnieniami. Ot choćby wykorzystanie wzorca HMVC. Wydawałoby się bułka z masłem. W szablonach Twig z których korzystam jest możliwość renderowania wybranej akcji dowolnego kontrolera.
Dokumentacja mówi co następuje:
<div id="sidebar"> {{ render(controller( 'AppBundle:Article:recentArticles', { 'max': 3 } )) }} </div>
gdzie Article to nazwa wybranego kontrolera (w pliku AppBundle/ArticleController) a recentArticles to metoda tego kontrolera którą chcemy uruchomić i wyrenderować to co ona zwróci.
Człowiek już zaciera ręce ciesząc się, że pójdzie gładko. A gdzie tam! Kłamią! W dokumentacji jest błąd. Trochę się naszukałam, żeby znaleźć informację, że dla wersji 3.2 i poniżej taki zapis zadziała. Za to dla wersji od 3.3 w górę trzeba inaczej, bo tak:
{{ render(controller( 'AppBundle\\Controller\\ArticleController:recentArticlesAction', {'max': 3} )) }}
Niestety zapomnieli o tym wspomnieć w dokumentacji. No to się z Wami dzielę, żebyście długo nie szukali.
Zawsze jeszcze można wykorzystać render_esi i odpalić esi + varnish.
Wtedy jest dużo szybciej ; ) Bo lecimy z HTTP Cache.
Pewnie tak. Na razie się uczę :)
Taka rada profilaktyczna, jeśli nie masz przymusu użycia akcji z kontrolera, to nie używaj. Od rzeczy globalnych są Twig Extensions :)
Ba… Gdybym nie miała przymusu…
Pamiętaj, że każdą stronę dokumentacji możesz samodzielnie uaktualnić — wystarczy fork na Githubie, poprawka, pull request.
Dobrze wiedzieć. Na pewno skorzystam.