Twig如何使用[]获取URL参数

21

我有一个像这样的网址:MYURL?filter[_per_page]=25&filter[name][value]=hello

如何使用twig获取这些参数?

我正在尝试{{ app.request.get('filter[_per_page]') }},但它总是为空...

谢谢!

编辑:我在JavaScript中,并且想将此结果分配给JavaScript变量,例如:var param = "{{ app.request.get('filter[_per_page]') }}";


你是否正在尝试从子请求(即嵌入控制器)中访问查询参数?尝试调用{{app.request.query.all}}并查看打印输出。希望这可以帮到你。 - Matteo
4个回答

35

您必须将访问 filter 元素视为数组:

{{ app.request.get('filter')['_per_page'] }}

这次在发布之前我会尝试一下...


确定吗?^^ 无法在 NULL 变量上访问键("_per_page")。 - Clément Andraud
非常奇怪...我完全复制了你的代码。如果我尝试使用 {{ app.request.get('filter') }},就会出现错误:Array to string conversion,所以我附加了访问数组键元素并正确打印了 25... - Matteo
对于我来说,仅使用{{ app.request.get('filter') }},我什么都没有,又是空字符串... - Clément Andraud
我的尝试网址是:http://spike.localhost/app_dev.php/issue?filter[_per_page]=25&filter[name][value]=hello - Matteo
嗨@ClémentAndraud,哪里错了? - Matteo
1
我在一个包含在另一个中的Twig模板中... ^^ - Clément Andraud

8
你已经接近成功了。 app 对象是 GlobalVariables 实例。当你使用 app.request 时,会调用 getRequest() 并返回标准的 Request 对象的实例。
现在,如果你查看 Request::get() (链接) ,你会发现:
get(string $key, mixed $default = null, bool $deep = false)

我认为你需要做的是这样:

{{ app.request.get('filter[_per_page]', NULL, true) }}

其中NULL是默认值,而true表示对Request对象进行深度遍历


不,它是相同的,我有一个空值。 - Clément Andraud

1

要访问查询参数数组,您可以使用以下方法:

app.request.attributes.get('_route_params');

您可以在文档上看到不同的解决方案。


0
我找到了这样的解决方案:

app.request.attributes.get('request').query.get('param_name')

虽然这段代码可能解决了问题,但是包括解释它如何以及为什么解决了问题将有助于提高您的帖子质量,并可能导致更多的赞。请记住,您正在回答未来读者的问题,而不仅仅是现在提问的人。请[编辑]您的答案以添加解释并指出适用的限制和假设。 - Yunnosch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接