Symfony – 在控制器中用参数生成url

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

我已经在食谱(Routage部分)find了这个代码:

$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 

但是我不明白是什么引用$路由器。 显然,这是行不通的。 有一个简单的方法来在控制器中生成一个参数路由URL?

这很简单:

 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')); 

从容器中获取路由器。

 $router = $this->get('router'); 

然后使用路由器来生成Url

 $uri = $router->generate('blog_show', array('slug' => 'my-blog-post')); 

如果你想要绝对的URL,你有第三个参数。

 $product_url = $this->generateUrl('product_detail', array( 'slug' => 'slug' ), UrlGeneratorInterface::ABSOLUTE_URL ); 

请记住包含UrlGeneratorInterface。

 use Symfony\Component\Routing\Generator\UrlGeneratorInterface; 

确保你的控制器扩展了Symfony\Bundle\FrameworkBundle\Controller\Controller;

你还应该检查terminal中的app/console debug:router来查看symfony命名路由的名称

在我的情况下,它使用减号而不是下划线

blog-show

 $uri = $this->generateUrl('blog-show', ['slug' => 'my-blog-post']);