2012-05-09 119 views
0

我试图呈现一个行动,这是在子命名空间中的控制器从Symfony的2如何从Symfony 2中的子名称空间控制器中嵌入动作?

问题是一根树枝视图中:渲染助手找不到控制器/行动,因为它是在一个命名空间低于控制器

这是我的控制器: 的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 /资源/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" %} 

我已阅读Embedding Controllers文档,但没有任何线索那里如何处理在子命名空间中的控制器。

谢谢。

回答

4

这些都应该工作。请记住,在字符串中的反斜杠需要转义(即增加一倍)

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

​​
+0

谢谢你的工作!耻辱Symfony不包括在文档中。 – ilanco

+0

他们这样做,只是不在该页面上。在花费时间使用视图/控制器系统之后,通过'Bundle:Controller:Action'或'FQCN :: actionName',您可以很方便地引用它们 –

0

我认为你应该可以使用反斜杠符号,但是我没有尝试过,因为我试图将所有控制器放入单个命名空间(如果你有很多这样的命名空间,这是不好的)。

事情是这样的:

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

试过了,没有工作。 '在第1行的AcmeTestBundle:FirstModule:example.html.twig中呈现模板期间(“您请求了不存在的服务”acmebundletestbundlecontrollerfirstmoduleexample“。”)时抛出了异常。' – ilanco

1

你试过吗?

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

or this?

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

有趣的是,页面已呈现并且在页面上出现以下错误:致命错误:无法在...中重新声明类Acme \ Bundle \ TestBundle \ Controller \ FirstModule \ ExampleController ...' – ilanco

+0

清除缓存后,出现另一个错误:'在渲染过程中抛出异常在文件“../src/Acme/Bundle/TestBundle/Controller/FirstModule/ExampleController.php”中定义的模板(“自动装载机预期类”Acme \ Bundle \ TestBundle \ Controller \ FirstModule/ExampleController“)。但类不在其中,类名或命名空间可能有一个错字。“)在AcmeTestBundle:FirstModuleExample:example.html.twig在第1行。' – ilanco

+0

我用另一个e更新了我的答案xample(尝试用名称空间分隔符替换目录分隔符)。 –

相关问题