我正在将现有的Symfony 2.8
迁移到Symfony 3.4
。目前,我正在使用包继承来通过自己的自定义实现扩展FOSUserBundle
的某些功能。
在Symfony 2.8
和Symfony 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/...
还是可以将文件保存在我自己的包目录中?