Symfony2:在Twig中,使用Render函数传递Request

时间:2013-10-11 20:38:06

标签: symfony twig

我理解使用{% 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()方法,将允许类似的效果,而无需将用户重定向到另一个页面。

3 个答案:

答案 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