Je suis encore assez nouveau sur Symfony2 et j'ai du mal à comprendre le problème suivant.
J'ai une Action de navigation principale dans un contrôleur avec les routes suivantes définies (dans le contrôleur) :
/**
* @Route("/browse")
* @Route("/browse/{page}")
* @Route("/browse/c/{category}/{categoryName}")
* @Route("/browse/c/{category}/{categoryName}/{page}")
* @Route("/browse/c/{category}/b/{brand}/{page}")
* @Route("/browse/b/{brand}")
* @Route("/browse/b/{brand}/{page}")
* @Template()
*/
public function browseAction($category = 0, $page = 1, $brand = 0) {
Le routage ci-dessus fonctionne sans problème.
Le problème est de générer des URL à partir de vues twig ou des aides de vue.
J'aurais aimé pouvoir faire ce qui suit dans une aide de vue :
{{ url('browse', {'brand': '123'}) }}
Cela fonctionne bien avec ce qui suit dans routing.yml :
browse:
pattern: /browse/b/{brand}
defaults: { _controller: MyCoreBundle:Browse:browse }
J'ai ensuite essayé :
browse:
pattern: /browse/b/{brand}
pattern: /browse/c/{category}/b/{brand}
defaults: { _controller: MyCoreBundle:Browse:browse }
Mais seul le dernier modèle semble s'appliquer et essayer d'utiliser ce qui suit provoquerait une erreur :
{{ url('browse', {'brand': '123'}) }}
Je réalise que je peux créer plusieurs routes individuelles dans routing.yml qui ont des noms uniques. Mais cela signifie qu'en fonction des variables qui seront utilisées, je dois spécifier un nom de route différent, ce qui deviendrait très rapidement compliqué.
J'ai également essayé :
browse:
pattern: /browse/c/{category}/b/{brand}/{page}
defaults: { _controller: MyCoreBundle:Browse:browse }
Avec :
{{ url('browse', {'brand': '123', 'category':'', 'page': '1'}) }}
Mais cela a provoqué une erreur indiquant que la catégorie n'était pas dans le bon format.
Est-ce que je rate quelque chose ici ? Est-ce que quelqu'un pourrait me mettre sur la bonne voie ? Dois-je peut-être créer une extension twig qui peut prendre toutes les variables et construire l'URL en fonction de l'entrée ?