【问题标题】:How should Symfony2 bundles that use annotated controllers be extended?应该如何扩展使用带注释控制器的 Symfony2 包?
【发布时间】:2012-04-12 15:51:37
【问题描述】:

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

当我创建扩展 BaseBundle routing.yml 的 CustomBundle 时,只会选择 CustomBundle 的空 Controller 文件夹。除了创建类来覆盖 BaseBundle 中的单个控制器,即使我不想更改任何内容,还有其他方法可以使其正常运行吗?

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

【问题讨论】:

    标签: symfony


    【解决方案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 控制器。

    【讨论】:

    • 实际上stackoverflow.com/questions/9373433/… 似乎更好地回答了这个问题。在使用 getParent 函数时,使用 BaseBundle 控制器文件夹的绝对路径似乎也有效,然后您可以更轻松地覆盖模板,而无需覆盖控制器操作。不过,我仍然必须在基本包控制器中明确指定模板。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2010-09-14
    相关资源
    最近更新 更多