Symfony 3-覆盖包模板-prependPath不起作用

时间:2019-01-14 10:01:55

标签: php symfony twig

我正在将现有的Symfony 2.8迁移到Symfony 3.4。目前,我正在使用包继承来通过自己的自定义实现扩展FOSUserBundle的某些功能。

Symfony 2.8Symfony 3.4中都可以正常工作。但是,不建议使用包继承,并且希望为将来的Symfony 4更新准备我的项目。

我知道我可以将要覆盖的模板从MyUserBundle/Resources/views/...移到app/Resources/FOSUserBundle/views/...中的apps资源文件夹中。但是,我希望将文件保留在我自己的捆绑软件(或SF 4中的src文件夹)中,以提高重用性。

在另一个问题的提示之后,我尝试使用CompilerPass将捆绑销售商品中的路径添加到搜索路径:

// src/MyUserBundle/MyUserBundle.php
class MyUserBundle extends Bundle { 
    //public function getParent() {
    //    return 'FOSUserBundle';
    //}

    public function build(ContainerBuilder $container) {
        parent::build($container);  
        $container->addCompilerPass(new OverrideCompilerPass());
    }
}

// src/MyUserBundle/DependencyInjection/Compiler/OverrideCompilerPass.php
public function process(ContainerBuilder $container) {
    $path = dirname(__DIR__, 2).'/Resources/views';
    $twigFilesystemLoaderDefinition = $container->findDefinition('twig.loader.native_filesystem');
    $twigFilesystemLoaderDefinition->addMethodCall('prependPath', array($path, 'FOSUser'));
}

但是,这不起作用。找不到模板,Symfony使用默认的FOS模板。调试器显示以下内容:

  // bin/console debug:twig WITH bundle inheritance
  @FOSUser    src/AppUserBundle/Resources/views/                                             
              vendor/friendsofsymfony/user-bundle/Resources/views/    

  // bin/console debug:twig WITHOUT bundle inheritance
  @FOSUser    vendor/friendsofsymfony/user-bundle/Resources/views/   

因此添加编译器传递没有任何区别:禁用包继承时,仅在FOS文件夹中搜索模板...

如何解决此问题?是仅使用app/Resources/...还是可以将文件保存在我自己的包目录中?

0 个答案:

没有答案