16 votes

symfony2 utilise plusieurs motifs d'url pour une seule action de contrôleur en utilisant une expression régulière

Est-il possible avec symfony2 de définir plusieurs modèles d'url pour une seule action du contrôleur en utilisant des expressions régulières, afin de ne pas avoir à définir plusieurs règles ? Merci d'avance

36voto

mbo Points 728

Lorsque vous utilisez des annotations, vous pouvez définir plusieurs itinéraires. Comme ça :

/**
 * @Route ("item1")
 * @Route ("item/2")
 * @Method("GET")
 */
public function itemAction() {

}

J'utilise la version 2.0.9.

17voto

ilanco Points 3980

Voulez-vous dire des placeholders avec des exigences ?

blog:
    pattern:   /blog/{page}
    defaults:  { _controller: AcmeBlogBundle:Blog:index, page: 1 }
    requirements:
        page:  \d+

Ici, vous avez plusieurs itinéraires définis par un caractère générique, validés par des expressions régulières, vers la même action de contrôleur.

Edita:

Chaque partie de l'url peut être un espace réservé.

blog:
    pattern:   /{type}/{page}
    defaults:  { _controller: AcmeBlogBundle:Blog:index, page: 1 }
    requirements:
        type: blog|articles
        page:  \d+

15voto

Jean-Luc Barat Points 585

Exemple d'annotations pour les routes avec paramètres :

/**
 * @Route("/shops/{page}", name="shops")
 * @Route("/shops/town/{town}/{page}", name="shops_town")
 * @Route("/shops/department/{department}/{page}", name="shops_department")
 */
public function shopsAction(Town $town = null, Department $department = null, $page = 1)
{ ... }

Puis générer une route dans twig comme ceci :

{{ path('shops_town') }}

o

{{ path('shops_town', {'town': town.id}) }}

o

{{ path('shops_department', {'department': department.id}) }}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X