gpt4 book ai didi

php - Symfony2 app.request.get 在呈现的 Twig 模板中返回 null

转载 作者:行者123 更新时间:2023-12-02 17:23:26 25 4
gpt4 key购买 nike

我通过渲染函数从 base.twig 文件渲染我的 header.twig。所以在我的 base.twig 中有以下代码来触发标题 Controller :

{{ render(controller('MyBundle:Global:header')) }}

该 Controller 呈现 header.twig。在这个 Twig 文件中,有以下用于更改语言的代码链接:

<a href="{{ path(app.request.get('_route'), app.request.get('_route_params')|merge({'_locale' : app.request.locale })) }}"><img src="{{ asset('flags/'~app.request.locale~'.png', 'img') }}" /></a>

对象形式 app.request.get('_route') 和 app.request.get('_route_params') 都返回 null。

app.request.get('_route')

如果我直接在 base.twig 中运行相同的代码链接,请求将返回正确的对象。看起来因为 header.twig 有它自己的 Controller ,所以请求不起作用。是否可以通过其他方式请求active url的路由和参数?

最佳答案

添加到@Gustek 的回答中,因为我错过了第一个案例中的实际问题。

您实际上是在呈现子请求,因此 _route_route_params 来自子请求而不是主请求。当您使用 Controller 时,最干净的方法是从主请求中获取参数并将它们作为 Controller 调用中的参数传递。您可以通过渲染调用传递它们(正如@Gustek 回答的那样),但这意味着您将意味着每次调用都这样做,或者您可以将请求堆栈传递到 twig session 中,但这将是不必要的额外工作。

public function headerAction(Request $request)
{
$masterRequest = $this->container->get('request_stack')->getMasterRequest();

//...

return $this->render('MyBundle:Global:header.html.twig', [
//...
'_route' => $masterRequest->attributes->get('_route'),
'_route_params' => $masterRequest->attributes->get('_route_params'),
]);
}

关于php - Symfony2 app.request.get 在呈现的 Twig 模板中返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40794432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com