在Twig中,是否可以使用命名空间模板路径(例如@admin/index.twig
)仅在需要时?
我的设置看起来像这样:
- 项目X具有
template
目录 - 项目X有一个依赖项Y,它有另一个
template
目录 - Twig设置两个目录作为模板路径(首先是项目X,然后是依赖项Y)
- 如果项目X想要覆盖由依赖性Y提供的模板(例如,
vendor/company/dependencyY/templates/navigation.twig
,它只需在自己的目录templates/navigation.twig
中创建模板
当我们想使用extends
关键字覆盖一个文件时,这就有问题了:
{# templates/navigation.twig #}
{% extends 'templates/navigation.twig' %}
{# meant to extend the dependency's template #}
{% block javascript %}
{{ parent() }}
<script src="...">
{% endblock %}
这显然会导致一个无限循环,因为它试图扩展自己。为了解决这个问题,我可以使用命名空间模板,例如。而不是extends 'templates/navigation.twig'
,我写extends '@dependency/templates/navigation.twig'
(如果相应地配置了twig)。这个管用
但现在我需要将名称空间@dependency/
添加到所有其他include
和extends
语句中,否则Twig将无法再找到模板。如果我这样做,templates/navigation.twig
上面的模板将不再被调用,因为它不在@dependency/
名称空间中。
怎么处理呢?
1条答案
按热度按时间p4rjhz4m1#
嗯,有时候输入问题会触发正确的想法。
我能够修复在多个命名空间中指定相同模板路径的问题:
这允许
include "dependency_template.twig"
和include "@dependency/dependency_template.twig"
。或者引用这个问题:@dependency/templates/navigation.twig
。Twig文档