Je veux générer une URL directement dans mon contrôleur. Je souhaite utiliser une URL définie dans mon fichier routing.yml qui nécessite un paramètre.
J'ai trouvé ce code dans le livre de recettes (section Routage):
$params = $router->match('/blog/my-blog-post');
// array('slug' => 'my-blog-post', '_controller' => 'AcmeBlogBundle:Blog:show')
$uri = $router->generate('blog_show', array('slug' => 'my-blog-post'));
// /blog/my-blog-post
Mais je ne comprends pas à quoi se réfère le $ routeur. Évidemment, ça ne marche pas. Existe-t-il un moyen simple de générer une URL de routage avec un paramètre dans un contrôleur?
C'est assez simple:
public function myAction()
{
$url = $this->generateUrl('blog_show', array('slug' => 'my-blog-post'));
}
Dans une action, $ this-> generateUrl est un alias qui utilisera le routeur pour obtenir la route demandée. Vous pouvez également le faire de la même manière:
$this->get('router')->generate('blog_show', array('slug' => 'my-blog-post'));
Si vous voulez des URL absolues, vous avez le troisième paramètre.
$product_url = $this->generateUrl('product_detail',
array(
'slug' => 'slug'
),
UrlGeneratorInterface::ABSOLUTE_URL
);
N'oubliez pas d'inclure UrlGeneratorInterface.
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
Obtenez le routeur du conteneur.
$router = $this->get('router');
Ensuite, utilisez le routeur pour générer l'URL
$uri = $router->generate('blog_show', array('slug' => 'my-blog-post'));
assurez-vous que votre contrôleur s'étend sur Symfony\Bundle\FrameworkBundle\Controller\Controller;
vous devriez aussi vérifier app/console debug:router
dans le terminal pour voir quel nom symfony a nommé la route
dans mon cas, il a utilisé un moins au lieu d'un trait de soulignement
c'est-à-dire blog-show
$uri = $this->generateUrl('blog-show', ['slug' => 'my-blog-post']);