Symfony - 在控制器中生成带有参数的 url
Posted
技术标签:
【中文标题】Symfony - 在控制器中生成带有参数的 url【英文标题】:Symfony - generate url with parameter in controller 【发布时间】:2013-12-01 18:15:54 【问题描述】:我想直接在我的控制器中生成一个 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?
【问题讨论】:
【参考方案1】:这很简单:
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'));
【讨论】:
【参考方案2】:如果你想要绝对网址,你有第三个参数。
$product_url = $this->generateUrl('product_detail',
array(
'slug' => 'slug'
),
UrlGeneratorInterface::ABSOLUTE_URL
);
记得包含 UrlGeneratorInterface。
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
【讨论】:
【参考方案3】:从容器中获取路由器。
$router = $this->get('router');
然后使用路由器生成Url
$uri = $router->generate('blog_show', array('slug' => 'my-blog-post'));
【讨论】:
【参考方案4】:确保您的控制器扩展 Symfony\Bundle\FrameworkBundle\Controller\Controller;
您还应该在终端中检查app/console debug:router
以查看 symfony 为该路由命名的名称
在我的例子中,它使用减号而不是下划线
即blog-show
$uri = $this->generateUrl('blog-show', ['slug' => 'my-blog-post']);
【讨论】:
以上是关于Symfony - 在控制器中生成带有参数的 url的主要内容,如果未能解决你的问题,请参考以下文章
使用 Twig 和 Symfony2 在 javascript 中生成路由
Symfony 2,autoload.php 在错误的目录中生成