php - 如何从 Bundle 中注册新的 Twig 命名空间?
问题描述
我寻找一种方法来更改 Symfony 树枝包的配置,以便注册额外的树枝命名空间。
我绊倒了前置扩展,但这只会解决一半的问题。当我写这样的代码时:
public function prepend(ContainerBuilder $container)
{
$bundles = $container->getParameter('kernel.bundles');
if (isset($bundles['TwigBundle'])) {
$config = $container->getExtensionConfig('twig')[0];
$paths = ['/path/to/cms' => 'cms'];
if (array_key_exists('path', $config)) {
$paths = array_merge($config['paths'], $paths);
}
$config['paths'] = $paths;
$container->prependExtensionConfig('twig', $config);
}
}
这意味着没有其他包可以再次更改树枝配置:
如何从包内添加树枝命名空间而不妨碍其他包做同样的事情?
解决方案
Twig 命名空间是一个应用程序问题,而不是包问题。
从包中注册新的名称空间可能会与使用该包的应用程序已定义的名称空间发生冲突。
此外,这不是必需的,因为 Symfony已经为每个 bundle 自动创建了一个命名空间:
如果您在应用程序中安装包/包,它们可能包含自己的 Twig 模板(在
Resources/views/
每个包的目录中)。为了避免弄乱你自己的模板,Symfony 在包名称之后创建的自动命名空间下添加包模板。例如,被调用的包的模板
AcmeFooBundle
在命名空间下可用AcmeFoo
。如果此捆绑包包含模板<your-project>/vendor/acmefoo-bundle/Resources/views/user/profile.html.twig
,您可以将其称为@AcmeFoo/user/profile.html.twig
.
你不应该弄乱那个配置。让应用程序开发人员或框架来处理它。
推荐阅读
- python - 每次访问时更改的模拟属性
- c++ - 如何使用字符串将无效操作数修复为二进制表达式?
- perl - 来自 CSV 文件的 Undef 值会产生不良结果
- android - 当我想用 epson TM T20 打印我的票时,我可以打印我的票,但异常状态 err_illegal 到 affich
- c# - 贝尔曼-福特负循环前身不存在
- c# - 如何使用 LINQ 在字典中查找元素
- php - SQL 查询在 PHP 中不起作用,没有数据插入数据库
- python - 从 Ruby 移植到 Python:如何处理“yield”
- c# - 将游戏上传到 Gamejolt(不下载)?
- python - 在 Python 中作为 func 参数传递时,DuckTyping 和识别 str 和 list 类型