Как создать динамическое меню в Symfony
Вопрос
Хотя я считаю, что PHP Symfony прекрасно справляется со многими задачами, мне сложно создавать легко масштабируемые динамические меню для веб-сайта.
Мне интересно, как другие разработчики Symfony справились с этой проблемой.Я приведу простой пример того, о чем я спрашиваю.
Если зайти на www.fool.com, вы увидите, что у них типичная настройка меню.Список категорий, одна из которых является активной и каким-то образом выделена с помощью CSS.
Какой был бы хороший способ сделать это динамически созданным в проекте Symfony.Передача каких-либо переменных из модуля в модуль.Элегантного решения я пока не нашел.
Решение
Обычно я просто вручную создаю массив комбинаций модулей и действий, которые хочу видеть в своем меню.Было бы довольно легко получить эту информацию из динамического источника (например, файла конфигурации или базы данных):
$this->menu = array(
'Home' => array('default', 'index'),
'About Us' => array('default', 'aboutUs'),
'Products' => array('products', 'index')
);
Затем я использую методы getActionName и getMethodName контроллера, чтобы определить, какой элемент в моем меню является текущим:
$this->current = array_search(array($this->getModuleName(), $this->getActionName()), $this->menu);
Затем я могу перебрать $menu из шаблона, чтобы создать меню.И я могу сравнить элементы с $current, чтобы определить, следует ли мне установить «текущий» класс для <li> пункта меню.
Пример дурака.com, который вы приводите, немного сложнее, потому что он двухуровневый.В этом случае вы, вероятно, захотите создать дерево меню из базы данных, возможно, используя поддержку вложенных наборов Propel.