7

是否可以包含一个模板,{% include %}该模板位于以下定义的模板路径之外:

$template = $twig->loadTemplate('example.tpl'); 

我问它是因为这条线不起作用:

{% include '.../example/navbar_left.tpl' %}
4

5 回答 5

5

不,使用 是不可能的Twig_Loader_Filesystem,因为它明确拒绝包含..在内部的模板名称。这可以通过validateName($name)file 内部函数的定义来验证Twig/lib/Twig/Loader/Filesystem.php

如果您需要访问路径之外的模板,我能想到的唯一干净的解决方案是创建自己的 loader

一个可行的解决方法是在实际注册的文件夹中定义一个符号链接Twig_Loader_Filesystem,指向您要访问的目录。小心使用这种方法,将链接指向一个安全的地方。

于 2012-10-27T03:11:11.523 回答
4

您可以将路径添加到 Twig 加载程序(文件系统加载程序),请参阅 Fabien 的最后回复(您需要 addPath 方法) https://github.com/symfony/symfony/issues/1912

于 2012-10-29T19:28:47.100 回答
4

您可以通过以下方式添加更多路径: https ://symfony.com/doc/3.4/templating/namespaced_pa​​ths.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>
于 2020-03-10T14:45:48.213 回答
2

您可以将第二条路径添加到您的 twig.yaml (symfony 4.4)

twig:
    paths:
        - '%kernel.project_dir%/templates'
        - '%kernel.project_dir%/example'

然后只需使用名称{% include 'navbar_left.tpl' %}

于 2020-07-05T10:27:37.600 回答
1

可以通过符号链接。

Symfony3 的示例

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' %}
于 2019-11-07T18:37:47.677 回答