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 ?

45
demandé sur Sybio 2013-11-18 18:41:08

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'));
102
répondu Sybio 2013-11-18 14:47:55

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;
13
répondu Pedro Casado 2016-10-06 14:00:08

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'));
12
répondu Jon Winstanley 2013-11-18 14:47:48

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']);
3
répondu Edwin Ikechukwu 2017-09-20 10:47:55