我想直接在我的控制器中生成一个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
但我不明白什么是引用$ router。显然,它不起作用。 有一种简单的方法可以在控制器中使用参数生成路由URL吗?
答案 0 :(得分:106)
这很简单:
public function myAction()
{
$url = $this->generateUrl('blog_show', array('slug' => 'my-blog-post'));
}
在一个动作中,$ this-> generateUrl是一个别名,它将使用路由器获取想要的路线,你也可以这样做:
$this->get('router')->generate('blog_show', array('slug' => 'my-blog-post'));
答案 1 :(得分:16)
如果你想要绝对的网址,你有第三个参数。
$product_url = $this->generateUrl('product_detail',
array(
'slug' => 'slug'
),
UrlGeneratorInterface::ABSOLUTE_URL
);
请记住包含UrlGeneratorInterface。
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
答案 2 :(得分:12)
从容器中获取路由器。
$router = $this->get('router');
然后使用路由器生成Url
$uri = $router->generate('blog_show', array('slug' => 'my-blog-post'));
答案 3 :(得分:3)
确保您的控制器扩展Symfony\Bundle\FrameworkBundle\Controller\Controller;
您还应该检查终端中的app/console debug:router
以查看symfony命名路径的名称
在我的情况下,它使用了减号而不是下划线
即blog-show
$uri = $this->generateUrl('blog-show', ['slug' => 'my-blog-post']);