Symfony2 route dans les annotations avec des paramètres optionnels
j'ai créé un itinéraire avec le paramètre optionnel dans le contrôleur comme ceci:
/**
* League action
*
* @Route("/association/{assoc}/{league}", name="league", requirements={"league" = "\d+"}, defaults={"game" = null})
* @Route("/association/{assoc}/{league}/{game}")
* @Template()
*
* @param $assoc
* @param $league
* @param $game
* @return array
*/
public function leagueAction($assoc, $league, $game)
mais si je tente de créer un lien avec cette route nommée, le paramètre facultatif est omis:
{{ path('league', {'assoc': association.short, 'league': league.id, 'game': g.id}) }}
de liaison qui en résulte est
/association/BVNR/7
Ce qui me manque?
OriginalL'auteur Steffen Kamper | 2013-09-09
Vous devez vous connecter pour publier un commentaire.
Dans les définitions suivantes,
deux itinéraires sont liés à votre action, la première (nommé
"league"
qui n'ont pas de paramètre par défaut et une seconde sans nom, comme vous n'avez pas ajouter le nom de l'attribut) qui n'ont pas de paramètre par défaut.Comment réparer ...
name
à votre deuxième route et de l'appeler car il contient"game"
paramètre."game"
paramètre à votre deuxième voie (Comme il le seul à avoir ungame
paramètre."How to improve ..."
une partie de ma réponse).Essayez ceci ...
Alors que vous devriez vous appeler
"league_game"
au lieu de"league"
,Comment améliorer ...
Assurez-vous que vous avez vraiment besoin de définir deux itinéraires, parce que je voudrais vous suggérons de garder une seule route.
Comme il y a une valeur par défaut pour
"game"
dans la définition suivante,Il couvre les deux versions, avec et sans
"game"
.ommitting première route ne fonctionne pas, j'ai essayé toutes les combinaisons.
Vous n'avez pas besoin de définir le "jeu" en tant que paramètre par défaut de votre premier itinéraire qu'il ne contiennent pas de "jeu" en paramètre. Ensuite, votre premier itinéraire doit être appelé comme suit: {{ path('ligue', {'assoc': de l'association.bref, les "ligue": de la ligue.id}) }} où ligue.l'id doit correspondre à l' "\d+" de la contrainte.
Ahmed - si je omettre les valeurs par défaut sur la première route, j'obtiens l'erreur suivante: Contrôleur "...\LigaController::leagueAction()" nécessite que vous devez fournir une valeur pour le "$jeu" argument (car il n'y a pas de valeur par défaut ou parce qu'il est un non argument optionnel après celui-ci). bien qu'en lien génération pour le premier parcours, je n'ai pas utiliser le paramètre de jeu.
Ah désolé, vous avez raison, je n'ai pas vu votre action de signature. Vous devez définir une valeur (par défaut ou non) pour tous les paramètres utilisés par leagueAction.
OriginalL'auteur Ahmed Siouani