部分控制器中的Symfony2主要请求对象

时间:2012-01-28 18:32:19

标签: symfony

我使用twig渲染,在部分控制器中我想获得主控制器名称,但是

$this->get('request')->get('_template')->get('controller')

返回partial

如何在部分控制器中获取主要请求对象?

现在我用:

{% render 'FooBundle::Controller:action' with {'controller': getControllerName()  } %}

使用自定义Twig功能。 也许有更优雅的方法来做到这一点?

2 个答案:

答案 0 :(得分:2)

您可能需要的是include标记,其中包含另一个模板。

{% include 'FooBundle::partial.html.twig' %}

模板包含适用于简单的情况,您只需要部分内容。

render标记用于调用控制器,执行更复杂的操作,或者模板无法访问显示所需的变量。这样做,内核会创建一个新请求,就好像它是一个独立的请求一样。事实上,使用ESI可能是对该控制器的独立请求。See here for details。因此,您无法获取主请求对象,可能没有主请求对象,因为您使用ESI或因为您为该控制器创建路由并通过AJAX或其他任何方式调用它。正如我所知,框架不支持依赖于通过子请求调用控制器的信息,我认为这是故意的。您必须传递查询参数中的所有信息。

你的例子不正确,就像这样:

{% render 'FooBundle:MyController:actionName' ... %}

你必须有一个FooBundle\Controller\MyControllerController这样的课程才能工作。

namespace FooBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class MyControllerController extends Controller {
    public function actionNameAction() {
    ...
    }
}

答案 1 :(得分:2)

您需要在render标记中显式传递此值。

{% render 'AcmeBundle:Demo:something' with { 'via': app.request.attributes.get('_controller') } %}