2010-07-28 3 views
0

je suit dans mon app/frontend/config/routing.yml:problème de routage Symfony, route ignoré

 
homepage: 
    url: /
    param: { module: main, action: index } 

default_index: 
    url: /:module 
    param: { action: index } 

default: 
    url: /:module/:action/* 

sf_guard_register: 
    url: /register 
    param: { module: user, action: register } 

sf_guard_signin: 
    url: /login 
    param: { module: sfGuardAuth, action: signin } 

sf_guard_signout: 
    url: /logout 
    param: { module: sfGuardAuth, action: signout } 

sf_guard_password: 
    url: /request_password 
    param: { module: sfGuardAuth, action: password } 

Lorsque je tente la route /register, je reçois ceci:

action "inscrire/index" ne exister.

Je devrais spécifier, je n'ai pas un module de «registre», et mon module d'utilisateur fonctionne bien s'il est appelé manuellement. De plus, les autres itinéraires fonctionnent bien.

Toutes les idées sont les bienvenues, merci!

Répondre

4

Conformément à la réponse de jeremy:

Parce que votre itinéraire default_index est placé au-dessus, va /register les causes de cette route corresponde. Comme il est situé avant l'itinéraire sf_guard_register, seule la première correspondance "compte".

Votre routing.yml devrait ressembler à ceci:

sf_guard_register: 
    url: /register 
    param: { module: user, action: register } 

sf_guard_signin: 
    url: /login 
    param: { module: sfGuardAuth, action: signin } 

sf_guard_signout: 
    url: /logout 
    param: { module: sfGuardAuth, action: signout } 

sf_guard_password: 
    url: /request_password 
    param: { module: sfGuardAuth, action: password } 

homepage: 
    url:/
    param: { module: main, action: index } 

default_index: 
    url: /:module 
    param: { action: index } 

default: 
    url: /:module/:action/* 

En outre, il y a un certain nombre de meilleures pratiques que vous pouvez suivre:

  1. Désactivation des routes par défaut et en se fondant uniquement sur le routage nommé tel que @homepage est plus rapide que de faire comprendre à symfony quelle route à correspondre en utilisant url_for ou link_to helpers. Par conséquent, désactivez le routage par défaut et créez les itinéraires vous-même. Ensuite, utilisez le nom de l'itinéraire lors de la génération d'URL.
  2. Les itinéraires utilisés le plus souvent doivent être placés en haut, par exemple si vous avez un lien de registre sur toutes les pages, vous devez placer sf_guard_register en haut.

Juste mes 5 cents - espérons qu'il vous sera utile ;-)

+0

Merci beaucoup, votre solution fonctionne, et vos suggestions sont très avisés. :) – Emerick

1

Les routes sont traitées dans l'ordre dans lequel elles figurent dans votre fichier routing.yml. Ainsi, l'URL/le registre correspond à l'itinéraire default_index avant d'accéder à sf_guard_register. Les deux default_index et default devraient aller au bas de votre fichier routing.yml.

0

Vous devriez même supprimer les deux routes par défaut:

default_index: 
    url: /:module 
    param: { action: index } 

default: 
    url: /:module/:action/* 

Comme il est une mauvaise pratique de les utiliser, et devrait toujours créer un itinéraire spécifique.

La meilleure façon d'ajouter des routes est de les PREPENDRE dans votre fichier, en ajoutant chaque nouvelle route tout en haut.

En outre, une bonne façon de déboguer votre routage dans frontend est de fonctionner:

symfony app:routes frontend 

donc vous verrez route Wich MACHES ce que (et ses exigences le cas échéant)