0

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

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

这是我的控制器: src/Acme/Bundle/TestBundle/Controller/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/Bundle/TestBundle/Resources/views/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" %}

我已阅读嵌入控制器文档,但不知道如何处理子命名空间中的控制器。

谢谢。

4

3 回答 3

4

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

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

或者

{% render "Acme\\Bundle\\TestBundle\\Controller\\FirstModule\\ExampleController::embedAction" %}
于 2012-05-09T21:32:04.850 回答
1

你试过这个吗?

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

或这个?

{% render "AcmeTestBundle:FirstModule\\Example:embed" %}
于 2012-05-09T21:12:20.667 回答
0

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

像这样的东西:

{% render "Acme\Bundle\TestBundle\Controller\FirstModule\Example:example" %}
于 2012-05-09T20:56:38.537 回答