我正在尝试操纵URL中的查询字符串值.
我可以从Request对象或Twig的函数中获取当前的URL或路由,但它是我正在努力的查询字符串.
我不需要app.request.attributes.get('_ route_params'),因为这会获取路径中的查询字符串参数.
我需要获取URL中实际存在的查询字符串参数.
我希望能够在Symfony2(在PHP控制器中)和Twig(在Twig模板中)中执行下面列出的两项操作:
获取URL中的所有当前查询字符串值并显示它们
执行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)
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;:)
获取查询字符串“ https://stackoverflow.com?name=jazz ”
{{ app.request.query.get('name') | default('default value if not set'); }}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33617 次 |
| 最近记录: |