是否可以包含一个模板,{% include %}
该模板位于以下定义的模板路径之外:
$template = $twig->loadTemplate('example.tpl');
我问它是因为这条线不起作用:
{% include '.../example/navbar_left.tpl' %}
是否可以包含一个模板,{% include %}
该模板位于以下定义的模板路径之外:
$template = $twig->loadTemplate('example.tpl');
我问它是因为这条线不起作用:
{% include '.../example/navbar_left.tpl' %}
不,使用 是不可能的Twig_Loader_Filesystem
,因为它明确拒绝包含..
在内部的模板名称。这可以通过validateName($name)
file 内部函数的定义来验证Twig/lib/Twig/Loader/Filesystem.php
。
如果您需要访问路径之外的模板,我能想到的唯一干净的解决方案是创建自己的 loader。
一个可行的解决方法是在实际注册的文件夹中定义一个符号链接Twig_Loader_Filesystem
,指向您要访问的目录。小心使用这种方法,将链接指向一个安全的地方。
您可以将路径添加到 Twig 加载程序(文件系统加载程序),请参阅 Fabien 的最后回复(您需要 addPath 方法) https://github.com/symfony/symfony/issues/1912
您可以通过以下方式添加更多路径: https ://symfony.com/doc/3.4/templating/namespaced_paths.html
配置.yml
# Twig Configuration
twig:
paths:
'%kernel.root_dir%/../src/AppBundle/Resources/views': AppBundle
'%kernel.root_dir%/../web/': 'WEB_DIR_DIST' #your new custom path
someFile.html.twig
<script>{{ source('@WEB_DIR_DIST' ~ 'custom.js') }}</script>
您可以将第二条路径添加到您的 twig.yaml (symfony 4.4)
twig:
paths:
- '%kernel.project_dir%/templates'
- '%kernel.project_dir%/example'
然后只需使用名称{% include 'navbar_left.tpl' %}
可以通过符号链接。
从src/AppBundle/Resources/views/Admin
Ubuntu:
ln -s ./../../../../../web/admin/_index-import-body.html index-import-body.html.twig
视窗:
mklink index-import-body.html.twig ./../../../../../web/admin/_index-import-body.html
然后像往常一样将它包含index-import-body.html.twig
在树枝文件中
{% include '@App/Admin/index-import-body.html.twig' %}