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

时间:2013-03-25 01:32:51

标签: symfony twig

我正在尝试操纵网址中的查询字符串值。

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

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

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

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

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

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

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

4 个答案:

答案 0 :(得分:51)

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

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

{% set queryParams = app.request.query.all %}
{% set queryParams = queryParams|merge({queryKey: newQueryValue}) %}

答案 1 :(得分:4)

进入控制器

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));
}

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

例如,使用此请求网址: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时修改其中一个参数,只需更改其中一个数组值,就像使用正常值一样(即:$params['id'] = $params['id'] - 1;

答案 2 :(得分:2)

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

{{ app.request.query.get('name') | default('default value if not set'); }}

答案 3 :(得分:0)

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

我在树枝文件中使用过这样的

{{app.request.query.get('year')| default('未设置为默认值'); }}四分之一季度

请让我知道。