Le cas simple
Symfony permet, grâce aux ParamConverter
, de convertir automatiquement un paramètre d'url en une autre valeur. Ce quelque chose que j'utilise beaucoup pour récupérer mes entité grâce au DoctrineParamConverter
. Par défaut ce converter va associer le paramètre id
d'une route avec l'entité passé en paramètre de l'action.
Par exemple grâce au DoctrineParamConverter
, le paramètre id
de cette route sera converti en l'entité Foo
correspondante dans cette action :
/**
* @Route("/foobar/{id}")
*/
class DemoController extends Controller
{
public function foobarAction(Foo $foo)
{
return new Response();
}
}
Deux entités
Disons maintenant que je souhaite avoir deux entités en paramètre de mon controller, je serai obligé d'utiliser un autre nom pour mon second id
.
Pour la première entité, le DoctrineParamConverter
s'en charge, pour la deuxième, comme l'indique la documentation de Symfony, je serai obligé de déclarer explicitement un ParamConverter
sur mon action afin d'indiquer le paramètre à utiliser :
/**
* @Route("/foo/{id}/bar/{bar_id}")
* @ParamConverter("bar", class="AcmeBundle:Bar", options={"id" = "bar_id"})
*/
class DemoController extends Controller
{
public function foobarAction(Foo $foo, Bar $bar)
{
return new Response();
}
}
Astuce
Et bien sachez qu'il y a une autre solution. En donnant les mêmes noms aux paramètres id
dans la route et aux paramètres de l'action, le DoctrineParamConverter
convertit les id
en entité sans configuration supplémentaire.
/**
* @Route("/foo/{foo}/bar/{bar}")
*/
class DemoController extends Controller
{
public function foobarAction(Foo $foo, Bar $bar)
{
return new Response();
}
}
Les commentaires