如何在Symfony 2中嵌入子命名空间控制器的动作?

时间:2012-05-09 20:46:23

标签: php symfony twig

我正在尝试在Symfony 2的Twig视图中呈现位于子命名空间控制器中的操作。

问题是:渲染助手无法找到控制器/操作,因为它位于 Controller 下面的命名空间中。

这是我的控制器: 的的src / Acme公司/捆绑/ TestBundle /控制器/ FirstModule / ExampleController.php

namespace Acme\Bundle\TestBundle\Controller\FirstModule;

class ExampleController extends Controller
{
    public function exampleAction(Request $request)
    {
        return $this->render('AcmeTestBundle:FirstModuleExample:example.html.twig');
    }

    public function embedAction(Request $request)
    {
        return $this->render('AcmeTestBundle:FirstModuleExample:embed.html.twig');
    }
}

这是我的看法: 的的src / Acme公司/捆绑/ TestBundle /资源/视图/ FirstModuleExample / example.html.twig

{% render "AcmeTestBundle:Example:embed" %}
// or
{% render "Acme\Bundle\TestBundle\Controller\FirstModule\Example:example" %}
// or
{% render "Acme\Bundle\TestBundle\Controller\FirstModule\ExampleController:exampleAction" %}

我已经阅读了Embedding Controllers文档,但没有提示如何处理子命名空间中的控制器。

感谢。

3 个答案:

答案 0 :(得分:4)

其中任何一个都应该有用。请记住,字符串中的反斜杠需要转义(即加倍)

{% render "AcmeTestBundle:FirstModule\\Example:embed" %}

{% render "Acme\\Bundle\\TestBundle\\Controller\\FirstModule\\ExampleController::embedAction" %}

答案 1 :(得分:1)

你试过这个吗?

{% render "AcmeTestBundle:FirstModule/Example:embed" %}

还是这个?

{% render "AcmeTestBundle:FirstModule\\Example:embed" %}

答案 2 :(得分:0)

我认为你应该能够使用反斜杠表示法,但是我没有尝试过,因为我练习将所有控制器放入单个命名空间(如果你有很多它们就很糟糕)。

这样的事情:

{% render "Acme\Bundle\TestBundle\Controller\FirstModule\Example:example" %}