我正在尝试操纵网址中的查询字符串值。
我可以从Request对象或Twig的函数中获取当前的URL或路由,但它是我正在努力的查询字符串。
我不需要app.request.attributes.get('_ route_params'),因为这会获取路径中的查询字符串参数。
我需要获取实际位于URL中的查询字符串参数。
我希望能够在Symfony2(在PHP控制器中)和Twig(在Twig模板中)中执行下面列出的两项操作:
获取URL中的所有当前查询字符串值并显示它们
执行1,但在显示之前更改其中一个查询字符串值
我找不到任何知道怎么做的人。
答案 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('未设置为默认值'); }}四分之一季度请让我知道。