2015-03-31 2 views
0

Je suis nouveau dans le framework Symfony. Actuellement je voie dans mybundle/Ressources/config/routing.yml:Routage Symfony avec paramètres optionnels dynamiques

fcr_category_head: 
    path: head/{slug}/{city}/{page} 
    defaults: { _controller: AppBundle:Head:index, slug: "", city: "all", page: 1 } 
    requirements: {page: "\d+"} 

le problème est que l'option city est disponible lorsque l'utilisateur utilise le filtre pour affiner les résultats à la ville sélectionnée, si city n'existe pas, le second paramètre devrait être page.

si les variations de l'itinéraire peuvent ressembler à ceci:

head/slug/city //default page 1 if city is not a number, if number then it is page 
head/slug/city/10 //e.g page 10 
head/slug/10 //no city parameter, because it is number, page 10 

est-il possible de faire ces combinaisons dans le fichier de routage ou la seule façon de résoudre ce problème est d'écrire quoique ma propre logique dans le contrôleur?

Merci.

+2

Cela sonne comme un bon cas d'utilisation pour les paramètres de requête plutôt que les attributs. C'est beaucoup plus flexible, et si vous vouliez ajouter un paramètre supplémentaire? Regardez la plupart des sites ecom, ils utilisent des paramètres de requête dans les produits de filtrage. – Luke

+0

@Luke Oui, mais j'ai une requête, que 'city' doit être dans ce format. Je pense que c'est surtout pour le référencement, d'autres paramètres de filtrage seront définis comme des paramètres de requête comme vous l'avez suggéré. – DeividasJJ

Répondre

2

Vous pouvez définir deux itinéraires pour la même action. Un avec la ville et un sans.

Comme ceci:

fcr_category_head: 
    path: head/{slug}/{page} 
    defaults: { _controller: AppBundle:Head:index, slug: "", city: "all", page: 1 } 
    requirements: {page: "\d+"} 

fcr_category_head_with_city: 
    path: head/{slug}/{city}/{page} 
    defaults: { _controller: AppBundle:Head:index, slug: "", city: "all", page: 1 } 
    requirements: {page: "\d+", city: "\w+"} 

D'abord attraperez toute demande comme celui-ci

head/slug/10 
head/slug 

Et seconde va attraper

head/slug/city 
head/slug/city/10 
+0

Merci, je vais essayer ça. – DeividasJJ

+0

Cela a fonctionné parfaitement. – DeividasJJ