Или, вообще, есть ли идиоматический способ настройки активной страницы при создании навигации по сайту в Symfony?
Не используйте для этого sfContext :: getInstance (), имена маршрутов или внутренние uris. Есть несколько способов добиться выделения меню навигации с помощью Symfony, лично мне нравится устанавливать атрибут запроса (например, в контроллере), например:
<?php
// ...
public function executeFoo(sfWebRequest $request)
{
$request->setAttribute('section', 'blah');
}
Тогда в вашем шаблоне:
<ul>
<li class="<?php echo 'blah' === $sf_request->getAttribute('section') ? 'active' : '' ?>">
<a href="<php echo url_for('@my_route') ?>">Blah</a>
</li>
</ul>
Вы даже можете добавить параметр section
из ваших маршрутов в файл routing.yml
:
my_route:
url: /foo
param: { module: foo, action: bar, section: blah }
Тогда в вашем шаблоне, если вы это сделаете, будьте внимательны, чтобы проверить параметр запроса вместо атрибута:
<ul>
<li class="<?php echo 'blah' === $sf_request->getParameter('section') ? 'active' : '' ?>">
<a href="<php echo url_for('@my_route') ?>">Blah</a>
</li>
</ul>
Простой, но эффективный, верно? Но если вам нужны более сложные навигационные системы (особенно вложенные меню), вам следует подумать об использовании более полнофункциональных плагинов или CMS на основе Symfony, таких как Sympal, Diem или ApostropheCMS.