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