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 5 中使用 GET 参数生成 URL

在 symfony 4 中生成 CRUD

Symfony 2,autoload.php 在错误的目录中生成

使用 GraphQL 转换在 AWS AppSync 中生成带有参数的订阅

在控制器中生成有效的hdiv url