web-dev-qa-db-fra.com

Comment puis-je avoir des paramètres facultatifs dans la route Symfony2

J'ai ce code ci-dessous:

/**
 * Lists all User entities.
 *
 * @Route("/{cid}",defaults={"cid" = null},name="user")
 * @Template()
 */
public function indexAction($cid=null)
{}

Maintenant, si je tape site/user/1 alors ça marche, mais si je tape site/user/ ça dit:

No route found

Comment puis-je faire en sorte que les deux itinéraires fonctionnent?

46
user825904

Essayez d'aller à site/user (remarquez pas de barre oblique inverse à la fin).

En général, cela devrait fonctionner, j'ai une configuration relativement similaire qui fonctionne.

Mais si tout le reste échoue, vous pouvez toujours définir plusieurs itinéraires pour la même action, c'est-à-dire.

/**
 * Lists all User entities.
 *
 * @Route("/", name="user_no_cid")
 * @Route("/{cid}", name="user")
 * @Template()
 */
public function indexAction($cid=null)
{
71
Inoryy

Utilisez un fichier yml pour votre configuration de routage et ajoutez une valeur par défaut pour id dans vos paramètres de routage comme ceci:

user:
  pattern:   /site/user/{id}
  defaults:  { _controller: YourBundle:Default:index, id: 1 }

Voir la documentation ici

36
fkoessler

Vous pouvez également le faire avec un paramètre GET, par ex.

/**
 * @param Request $request
 *
 * @return Response
 */
public function displayDetailAction(Request $request) : Response
{
    if ($courseId = $request->query->get('courseId')) {
5
crmpicco