我正在尝试在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文档,但没有提示如何处理子命名空间中的控制器。
感谢。
答案 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" %}