我理解使用{% render() %}
会自动强制发送一个新的请求对象,但是如果有一种方法可以将原始请求作为参数传递,那么我很好奇吗?
{% render('some_action', {'originalRequest': app.request}) %}
这对控制器似乎没有任何作用:
public function actionAction($originalRequest = null)
{
// $originalRequest ends up just being null
}
我假设它是因为路线的设置方式:
some_action:
pattern: /stuff/
defaults: { _controller:SomeApp:Controller:action }
我想像这样的数据显然不能成为URL的一部分,所以某种方式将数据传递给可渲染的URL,什么都没有?
编辑(解决方案)
从长远来看,解决方案非常简单,正如下面的PetrePătraşc所证明的那样,在Twig中,我需要做的就是直接调用Controller,并且通过这种方法我可以传入对象(例如Request对象) )和数组,而不是URL中的文本值
要在控制器中执行大致相同的想法,使用路由器中的forward()
方法,将允许类似的效果,而无需将用户重定向到另一个页面。
答案 0 :(得分:8)
如果我理解正确,你正在寻找:
{% render "MyBundle:Controller:someAction" with { 'originalRequest' : app.request } %}
答案 1 :(得分:7)
使用render函数作为结果
{{ render(controller('MyBundle:ControllerName:example', {'originalRequest': app.request})) }}
然后在你的控制器中
public function exampleAction(Request $originalRequest)
{
// do something
}
答案 2 :(得分:-1)
从Symfony 2.4开始,您可以通过request_stack访问原始请求。这样就无需创建新的方法参数。
function exampleAction() {
$request = $this->get('request_stack')->getMasterRequest();
//do something
}
请谨慎使用,因为它会使您的子请求与ESIs /反向代理不兼容(子请求也是主请求)http://symfony.com/blog/new-in-symfony-2-4-the-request-stack