在 Symfony 5 中使用 GET 参数生成 URL

Posted

技术标签:

【中文标题】在 Symfony 5 中使用 GET 参数生成 URL【英文标题】:Generate URL in Symfony 5 with GET parameters 【发布时间】:2020-05-08 07:27:30 【问题描述】:

在 Symfony 5 中,我想部分基于已发布的 GET 参数生成一个 URL。

假设发布的 URL 是:

user/edit/5?foo=1&bar=1&baz=1&qux=1

我想在没有foo的控制器中生成:

user/edit/5?bar=1&baz=1&qux=1

首先,我删除foo参数:

$request->query->remove('foo');

如果我没有在 URL 中获得 user_id 作为路由参数 (5),我会使用:

$this->generateUrl('user_edit', $request->query->all());

但这不起作用,因为缺少user_id。那么如何在不重写所有变量的情况下生成这样的 URL:

$this->generateUrl('user_edit', ['id' => $user->getId(), ???]);

我在考虑 php 函数 array_merge(),但在我看来,这更像是一个技巧,而不是一个优雅的解决方案:

$this->generateUrl('user_edit', array_merge(
    ['id' => $user->getId()],
    $request->query->all())
);

【问题讨论】:

是的,谢谢你的回答 yivi。我刚刚投票了。 【参考方案1】:

使用array_merge() 没有任何问题。这正是你想要完成的。这不是“技巧”,而是一种语言功能。

如果您想要更简洁的语法,只需使用+

$this->generateUrl('user_edit', $request->query->all() + ['id' => $user->getId()]);

最终结果与上面的完全一样,而且更短。

【讨论】:

以上是关于在 Symfony 5 中使用 GET 参数生成 URL的主要内容,如果未能解决你的问题,请参考以下文章

在symfony 4中映射实体

Symfony 5(Doctrine 2.9),Doctrine 不会为 ManyToOne 自引用关系生成迁移

Symfony 5 / 请求响应:使用 Ajax 获取数据

运行 PHPUnit 测试时,容器参数在 Symfony 5 服务中不可用/注入

从控制器 Symfony2 中的 URL 获取参数

Symfony 4 AbstractController问题与参数计数