Какой наилучший способ выводить определенные сущности на всех страницах, Symfony 2.3?
Например, на всех страницах мне нужны последние три новости. Простой путь - делать субзапрос из шаблона (например render у twig). Но это напрасная трата ресурсов. Другой путь - отдавать их параметрами из каждого action, но это попахивает бессмысленным дублированием кода, и тоже мне не нравится. Я начинал с использования KnpMenuBundle, который расширяет twig, позволяя достучатся до конструктора меню. Когда сущности стали усложняться, я стал переопределять вид меню в twig шаблонах и передавать дополнительные свойства как атрибуты элемента меню. Но оглянувшись, на то, что я наделал, я только могу грустно покачать головой. Думаю, ответ лежит где-то в области сервисов.
вы можете в шаблоне запросить какой-то определенный экшен контроллера. В результате будет сформирован новый запрос в appkernel с пометкой что это не master запрос, и ответ этого экшена будет выведен в нужное место шаблона. symfony.com/doc/2.3/book/templating.html#embedding...
это является решением, но как я и писал, вызывая render из шаблона формируется субзапрос, который ухудшает производительность. это хорошо видно во встроенном профайлере. возможно существуют иные пути?
@HDApache, что вы привязались со своим тегированием, вы же даже не работали с symfony.
@sand_alkr, вы всегда можете кешировать ответы экшена, из коробки у вас как минимум доступна возможность применять http кэш и реализацию прокси-сервера на php (AppCache).
Так же вы можете реализовать свой листенер запросов и кешировать в зависимости от надобности результат.
По поводу падения производительности, не настолько серьезное там падение, возможно в режиме дебага да, но в продакшен энвайрменте все хорошо там.
@HDApache, товарищ @sand_alkr переживает что создание внутреннего запроса к экшену имеет большой оверхэд и в результате система будет рабоать медленее.