Symfony - 在控制器中生成带参数的url

52 symfony symfony-routing

我想直接在我的控制器中生成一个Url.我想使用我的routing.yml文件中定义的需要参数的URL.

我在Cookbook(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
Run Code Online (Sandbox Code Playgroud)

但我不明白什么是$ router.显然,它不起作用.有一种简单的方法可以在控制器中生成带有参数的路由URL吗?

Syb*_*bio 109

这很简单:

public function myAction()
{
    $url = $this->generateUrl('blog_show', array('slug' => 'my-blog-post'));
}
Run Code Online (Sandbox Code Playgroud)

在一个动作中,$ this-> generateUrl是一个别名,它将使用路由器来获取所需的路由,你也可以这样做:

$this->get('router')->generate('blog_show', array('slug' => 'my-blog-post'));
Run Code Online (Sandbox Code Playgroud)


Ped*_*ado 18

如果你想要绝对的网址,你有第三个参数.

$product_url = $this->generateUrl('product_detail', 
    array(
        'slug' => 'slug'
    ),
    UrlGeneratorInterface::ABSOLUTE_URL
);
Run Code Online (Sandbox Code Playgroud)

请记住包含UrlGeneratorInterface.

use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
Run Code Online (Sandbox Code Playgroud)


Jon*_*ley 13

从容器中获取路由器.

$router = $this->get('router');
Run Code Online (Sandbox Code Playgroud)

然后使用路由器生成Url

$uri = $router->generate('blog_show', array('slug' => 'my-blog-post'));
Run Code Online (Sandbox Code Playgroud)