35

我正在尝试操作 URL 中的查询字符串值。

我可以从 Request 对象或 Twig 的函数中获取当前 URL 或路由,但这是我正在努力解决的查询字符串。

我不需要 app.request.attributes.get('_route_params') 因为这会获取路由中的查询字符串参数。

我需要获取实际在 URL 中的查询字符串参数。

我希望能够在 Symfony2(在 PHP 控制器中)和 Twig(在 Twig 模板中)中执行下面列出的两件事:

  1. 获取 URL 中的所有当前查询字符串值并显示它们

  2. 执行 1,但在显示它们之前更改其中一个查询字符串值

我找不到任何知道如何做到这一点的人。

4

4 回答 4

65

您可以使用app.request.query.all来获取您的查询字符串。

如果您想更改 Twig 中的参数,您可以这样做

{% set queryParams = app.request.query.all %}
{% set queryParams = queryParams|merge({queryKey: newQueryValue}) %}
于 2013-03-25T03:07:16.563 回答
5

进入控制器

use Symfony\Component\HttpFoundation\Request;

public function fooAction(Request $request)
{
  $params = $request->query->all();
}

注意$request->query->all();将返回一个带有名为查询参数的键的数组

进入树枝

只要您从控制器传递(一如既往地阅读此内容),您就可以通过这种方式将参数传递给视图

use Symfony\Component\HttpFoundation\Request;

public function fooAction(Request $request)
{
  $params = $request->query->all();
  return $this->render('MyFooBundle:Bar:foobar.html.twig', array('params' => $params));
}

在您的 twig 模板foobar.html.twig中,您只需使用params变量即可访问所有查询字符串参数。

例如,使用此请求 URL:http://example.com/?foo=bar&secondfoo=secondbar

{% for paramName, paramValue in params %}
  <div>{{ paramName }}: {{ paramValue }}</div>
{% endfor %}
<div>{{ params.secondfoo }}</div>

树枝输出:

<div>foo: bar</div>
<div>secondfoo: secondbar</div>
<span>secondbar</span>

另一种方法是app.request.query.all在 twig 中使用,而无需从控制器向 twig 传递任何内容。

最后说明

如果您想在将数组从控制器传递给 twig 时修改其中一个参数,只需更改其中一个数组值,就像使用普通值一样(即$params['id'] = $params['id'] - 1;:)

于 2013-03-25T08:01:33.370 回答
5

获取查询字符串“ https://stackoverflow.com?name=jazz

{{ app.request.query.get('name') | default('default value if not set'); }}
于 2018-09-29T15:33:47.367 回答
0

嗨,斯蒂芬,我们已经尝试了您的解决方案来获取该值,但它会变为默认值。 http://localhost:4000/about/investors/key-dates-and-events-details?year=2017#q1

我在我的树枝文件上用过这样的

{{ app.request.query.get('year') | default('如果没有设置默认值'); }} 第四季度

请告诉我。

于 2019-01-08T06:03:16.543 回答