Symfony-générer une url avec un paramètre dans le contrôleur
je veux générer une Url directement dans mon contrôleur. Je veux utilisateur une url définie dans mon routage.fichier yml qui a besoin d'un paramètre.
j'ai trouvé ce code dans le Cookbook (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 fait référence l' $routeur. Évidemment, cela ne fonctionne pas. Est-il un moyen simple de générer un routage d'url avec un paramètre dans un contrôleur ?
4 réponses
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 va utiliser le routeur pour obtenir la route désirée, vous pouvez aussi faire ceci qui est le même :
$this->get('router')->generate('blog_show', array('slug' => 'my-blog-post'));
si vous voulez des urls 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;
récupérez le routeur du conteneur.
$router = $this->get('router');
puis 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 Symfony\Bundle\FrameworkBundle\Controller\Controller;
vous devriez également vérifier app/console debug:router
dans le terminal pour voir ce nom symfony a nommé la route
dans mon cas, il a utilisé un moins au lieu d'un trait de soulignement
j'.e blog-show
$uri = $this->generateUrl('blog-show', ['slug' => 'my-blog-post']);