Symfony2/Twig处理获取URL查询字符串值

use*_*356 26 symfony twig

我正在尝试操纵URL中的查询字符串值.

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

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

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

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

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

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

我找不到任何知道怎么做的人.

Tho*_*ire 53

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

如果你想在Twig中更改一个参数,你可以这样做

{% set queryParams = app.request.query.all %}
{% set queryParams = queryParams|merge({queryKey: newQueryValue}) %}
Run Code Online (Sandbox Code Playgroud)


Don*_*sto 5

进入控制器

use Symfony\Component\HttpFoundation\Request;

public function fooAction(Request $request)
{
  $params = $request->query->all();
}
Run Code Online (Sandbox Code Playgroud)

注意$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));
}
Run Code Online (Sandbox Code Playgroud)

在您的 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>
Run Code Online (Sandbox Code Playgroud)

树枝输出:

<div>foo: bar</div>
<div>secondfoo: secondbar</div>
<span>secondbar</span>
Run Code Online (Sandbox Code Playgroud)

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

最后说明

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


Jas*_*ana 5

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

{{ app.request.query.get('name') | default('default value if not set'); }}
Run Code Online (Sandbox Code Playgroud)