我是新来的symfony,到目前为止我只是喜欢它!
现在,我在玩不同的个人爱好项目,我遇到了一些我似乎无法理解的事情。
我正在运行symfony 3.3.6。我试图在我的项目中添加一个theme
功能。现在,我的bundle有自己的视图,我可以在app/Resources/views/
中覆盖它们。所以现在,开箱即用的symfony支持基本视图,并且有覆盖的可能。
我想达到的是再退一级。
我想让twig首先查看一个主题文件夹,其中[THEME]
是一个配置。
1)在/app/theme/[theme]/resources/view中查找文件
2)在/app/theme/[theme]/resources/[bundle]/view中查找文件
我也希望这种情况发生在一个包内,例如themebundle。
基本上,我想有一个捆绑包,这将采取的逻辑为小枝如何找到意见。现在所有的代码都能正常工作,这一点非常重要。所以我不想添加路径变量或类似的东西,但我实际上想从我自己的包中修改twigbundle的行为!
这种事有可能吗?
最佳答案
twig有一个内置的特性来实现您想要的名称空间。
twig将始终加载命名空间中存在的第一个模板,从第一个配置的路径开始。
在app/config/config.yml
中配置路径,如下所示:
twig:
# ...
paths:
'%kernel.project_dir%/vendor/acme/themes/theme1': theme
'%kernel.project_dir%/vendor/acme/themes/theme2': theme
'%kernel.project_dir%/vendor/acme/themes/common': theme
然后使用模板中的命名空间,如下所示:
{{ include('@theme/header.twig') }}
参见文档章节Multiple Paths per Namespace。
为了动态地添加更多位于bundle目录中的路径,可以在相应的bundle中使用编译器传递来添加它们。
关于php - 覆盖Twig查找 View 的方式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45662042/