如何扩展使用带注释的控制器的Symfony2捆绑包?

时间:2012-03-29 01:21:18

标签: symfony

我有一个BaseBundle,我需要扩展它以覆盖少量模板和最终的控制器功能。我正在使用注释,因此app / config / routing.yml引用“@ BaseBundle / Controller /".

当我创建扩展BaseBundle的CustomBundle时,routing.yml只需选择CustomBundle的空Controller文件夹。除了创建类以覆盖BaseBundle中的单个控制器,即使我不想更改任何内容,有没有办法使这种行为正确?

更新: 扩展BaseBundle还有一个额外的问题,即破坏它的所有@Template()注释。如果我创建一个扩展BaseBundle控制器的空控制器,它会抱怨无法找到不存在的CustomBundle:Default:index.html.twig模板。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,发现通过修改主捆绑文件(AcmeCustomBundle.php),因为文档建议修复了问题。

即。不要使用:

public function getParent()
    {
        return 'AcmeBaseBundle';
    })

在我的CustomBundle默认控制器中我有:

use Acme\BaseBundle\Controller\DefaultController as BaseDefaultController;
class DefaultController extends BaseDefaultController

在我的BaseBundle控制器中,我必须将所有@Template()注释明确定义为@Template(“AcmeBaseBundle:Default:index.html.twig”)等,然后在覆盖特定控制器操作时,我要么使用@Template()在CustomBundle控制器中操作以使用CustomeBundle模板,或者如果我不想覆盖模板,则再次显式声明BaseBundle模板。对于您不想覆盖的任何操作,只需将其从CustomBundle控制器中取出,将使用BaseBundle控制器。