2009-02-06 9 views
0

Je trouve la documentation très difficile à comprendre concernant le système de routage Symfony et j'ai besoin d'un peu d'aide pour cela.Comment formater une URL externe dans Symfony?

Je voudrais formater mon URL externe pour ressembler à ce qui suit ...

monsite/module/illinois/Chicago/

via un formulaire, l'utilisateur peut effectuer une recherche par ville, état, ou de la ville et état.

Je pense que la règle de routage serait quelque chose comme: url: module /: Etat /: ville

Mais si seulement la ville ou seulement l'état est recherché? Des erreurs Symfony indiquent qu'il y a une erreur car un des paramètres de route est manquant.

Quelle est la bonne façon de gérer cela?

Répondre

1

Lorsque vous définissez un paramètre sur votre itinéraire, Symfony requiert la spécification de ce paramètre. Donc, dans votre cas,: state et: city doivent tous les deux être spécifiés dans l'url.

Si vous souhaitez que l'un ou l'autre de ces paramètres soit facultatif, vous pouvez essayer d'utiliser la syntaxe de routage * (wildcard non nommé). Cela ressemblerait à quelque chose comme ceci:

some_route_name: 
    url: /module/* 
    param: 
    module: module 
    action: search 

Cette route détectera urls qui ressemblent à ceci:

  • /module/ville/Chicago
  • /module/État/illinois
  • /Module/Etat/Illinois/ville/chicago
  • /modules/ville/Chicago/état/Illinois

Je sais que ce n'est pas idéal, parce que «ville» et «état» sont dans l'url. Mais c'est la façon la plus simple de faire ce que vous voulez avec le système de routage de Symfony.

Ensuite, dans votre contrôleur, vous seriez en avant à 404 si l'utilisateur n'a pas spécifié de ville ou de l'État:

$this->forward404Unless($this->getRequestParameter('city') || $this->getRequestParameter('state')); 

Si ce n'est pas assez bon, vous avez quelques autres options. Si vous utilisez 1.1 ou 1.2, vous pouvez sous-classer l'objet de routage pour qu'il fasse ce que vous voulez. Ou vous pouvez utiliser plusieurs routes pour faire ce que vous voulez (une qui est/module /: city_or_state et une autre qui est/module /: state /: city).

+0

Merci pour la réponse, ce que j'ai fait était d'utiliser plusieurs routes et avait une action de routage déterminer quelle route il voulait afficher en fonction des critères. – Failpunk

Questions connexes