Ou, plus généralement, existe-t-il un moyen idiomatique de définir la page active lors de la création de la navigation du site dans Symfony ?
N'utilisez pas sfContext::getInstance(), les noms de route ou les uris internes pour cela. Il y a plusieurs façons de mettre en évidence le menu de navigation avec Symfony, personnellement j'aime bien mettre un attribut de requête (par exemple dans un contrôleur), comme ceci :
<?php
// ...
public function executeFoo(sfWebRequest $request)
{
$request->setAttribute('section', 'blah');
}
Puis dans votre modèle :
<ul>
<li class="<?php echo 'blah' === $sf_request->getAttribute('section') ? 'active' : '' ?>">
<a href="<php echo url_for('@my_route') ?>">Blah</a>
</li>
</ul>
Vous pouvez même ajouter le section
de vos routes dans le routing.yml
fichier :
my_route:
url: /foo
param: { module: foo, action: bar, section: blah }
Ensuite, dans votre modèle, si vous le faites, veillez à vérifier qu'il s'agit d'un paramètre de requête plutôt que d'un attribut :
<ul>
<li class="<?php echo 'blah' === $sf_request->getParameter('section') ? 'active' : '' ?>">
<a href="<php echo url_for('@my_route') ?>">Blah</a>
</li>
</ul>
Simple et efficace, non ? Mais si vous avez besoin d'une navigation plus complexe (notamment des menus imbriqués), vous devriez penser à utiliser des plugins plus complets ou des CMS basés sur Symfony comme Sympal, Diem ou ApostropheCMS.