php - Symfony 3 - 覆盖包模板 - prependPath 不起作用
问题描述
我正在将现有的迁移Symfony 2.8
到Symfony 3.4
. 目前我正在使用包继承来扩展FOSUserBundle
我自己的自定义实现的一些功能。
这在Symfony 2.8
和中都可以正常工作Symfony 3.4
。但是,不推荐使用捆绑继承,并且希望为我的项目做好准备,以便将来更新到Symfony 4
.
我知道我可以将我想要覆盖的模板移动MyUserBundle/Resources/views/...
到app/Resources/FOSUserBundle/views/...
. 但是,我想将文件保存在我自己的包(或 SF 4 中的 src 文件夹)中,以提高可重用性。
根据另一个问题的提示,我尝试使用 aCompilerPass
将我的包中的路径添加到搜索路径:
// 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/...
唯一的选项还是可以将文件保存在我自己的捆绑目录中?
解决方案
推荐阅读
- java - 下载源代码后,为什么会在堆栈跟踪中看到未知源?
- performance - `now` 在 1000 万次迭代循环中变慢
- php - 在纯 php 上的电报机器人中使用回调查询在行中处理用户消息输入
- python - 另一个文件中的 Tkinter 按钮事件绑定
- security - 安全地签署数据以确保它是在特定时间段内生成的(客户端)
- python - 将一列中的唯一值设置为多列
- awk - 如何在awk中为变量着色
- python - 如何创建一个 if 语句来检查输入是否为 str/int
- python-3.x - 如何将异常记录到文件中?
- android - 如何更改 kotlin 中的图标颜色?