无法覆盖Symfony2 GeneratorBundle中的标准骨架视图

时间:2011-08-29 07:02:34

标签: code-generation symfony

我无法覆盖generatorBundle的骨架视图。

我首先尝试在/app/Resources/SensioGeneratorBundle/skeleton/crud/views/index.html.twig中添加我的观点

它没有用,所以我尝试创建一个新的Bundle,扩展SensioGeneratorBundle并将我的视图复制到其Resources文件夹中。

我已经设法使用twig表单的主题,但我需要个性化doctrine生成的视图:generate:crud命令。

2 个答案:

答案 0 :(得分:8)

首先:相应的骨架视图位于此处:

vendor/bundles/Sensio/Bundle/GeneratorBundle/Resources/skeleton/crud

通过覆盖这些视图文件,你应该没问题 - 但这不是我们想要的;)

在:

vendor/bundles/Sensio/Bundle/GeneratorBundle/Command/GenerateDoctrineCrudCommand.php

发电机有一个存取器:

protected function getGenerator()
{
    if (null === $this->generator) {
        $this->generator = new DoctrineCrudGenerator($this->getContainer()->get('filesystem'), __DIR__.'/../Resources/skeleton/crud');
    }

    return $this->generator;
} 

可以尝试在扩展的Bundle中覆盖此方法,并在构造函数中设置不同的$skeletonDir

修改

我的测试环境中的快速示例如何实现(我只进行了快速测试;):

为自定义生成器生成新捆绑包:php app/console generate:bundle并按照说明操作。不需要路线。我为此示例选择了:Acme / CrudGeneratorBundle(或使用现有的包)

在新创建的捆绑目录中创建名为“Command”的文件夹。

将命令类放在此文件夹中。

<?php
//src/Acme/CrudGeneratorBundle/Command/MyDoctrineCrudCommand.php

namespace Acme\CrudGeneratorBundle\Command;

use Sensio\Bundle\GeneratorBundle\Generator\DoctrineCrudGenerator;

class MyDoctrineCrudCommand extends \Sensio\Bundle\GeneratorBundle\Command\GenerateDoctrineCrudCommand
{
    protected function configure()
    {
        parent::configure();
        $this->setName('mydoctrine:generate:crud');
    }

    protected function getGenerator()
    {
        $generator = new DoctrineCrudGenerator($this->getContainer()->get('filesystem'), __DIR__.'/../Resources/skeleton/crud');
        $this->setGenerator($generator);
        return parent::getGenerator();
    }
}

将vendor / bundles / Sensio / Bundle / GeneratorBundle / Resources / skeleton / crud复制到您的资源(在我的示例中为“src / Acme / CrudGeneratorBundle / Resources / crud”)

答案 1 :(得分:1)

这对我来说是最好的解决方案: symfony2-how-to-override-core-template

不会添加命令,但会修改该特定包的骨架。