Symfony Аналог виджетов в Симфони

MadHatter

Новичок
Привет, добрый All! Я только начинаю изучать Symfony (но есть опыт с Yii), помогите понять философию следующего момента.
Совершенно типовая задача. Меню с выборкой пунктов из базы. Что бы не плодить запросов в каждом контроллере в Yii для таких задач используется виджет, который вставляется в лейаут.
Как подобное разруливается в Symfony?
 

keltanas

marty cats
Для начала надо понять, что Symfony - это не Yii. Принцип ХХП здесь не исключен, но крайне не рекомендуется и затруднителен в реализации. Те подходы, которые в Yii считаются бест практиклс, в Symfony могут быть жутким гавнокодом.

Самое простостое - это создать в контроллере метод, рисующий меню и вызывать его из шаблона.
Можно сделать тоже самое, только через ESI. Получится вызов контроллера с кешированием. Не факт, что это лучший способ кешировать меню.
Более сложный метод работа.щий через абстрацкии - использовать KnpMenuBundle. Не могу сказать, что рекомендую этот подход, но, он получается более гибгим и идеалогически более правильный, хоть и не более оптимальным (как по скорости разработки, так и скорости работы).
Уверен, можно придумать еще дюжину способов, как нарисовать меню.
Как бы там ни было, наиболее подходящий способ будет зависеть от конкретных задач.
 

MadHatter

Новичок
Во-первых, благодарю за ответ.
Во-вторых, чувствую это важно для понимания, поэтому рискну уточнить. "Принцип ХХП" это что?
 

MadHatter

Новичок
Я не ошибся. Действительно важно для понимания )))).
Ну а если серьезно, чем сама идея виджетов кажется Вам нездоровой?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Мне кажется, ответ зависит от того, как это меню надо менять. Если меню условно статическое - лучше сделать его частью шаблона, и редактировать шаблон когда надо. Если меню надо управлять из админки и хранить в базе, идеологически верно будет признать это частью бизнес-логики, и реализовать полноценной моделью, которую передавать во View.
Или же реализовать отрисовку меню на клиенте, как это делается в MVVM.

А если это будущая CMS вида Drupal - то писать как умеешь, и менять работу, как это обычно делается :)
Все эти вызовы контроллера из шаблона, вызовы моделей из плагина, вызовы Акамая из страницы - лишь сорта.
 
Последнее редактирование:

AmdY

Пью пиво
Команда форума
ничего писать не надо, берёшь KnpMenuBundle, как выше советовали, и спишь спокойно.
 
Сверху