Twig-包含其他目录中的模板

时间:2012-10-22 19:05:04

标签: twig

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

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

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

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

5 个答案:

答案 0 :(得分:4)

不,使用Twig_Loader_Filesystem是不可能的,因为它明确拒绝内部有..的模板名称。这可以在文件validateName($name)内的函数Twig/lib/Twig/Loader/Filesystem.php的定义中得到验证。

如果您需要访问路径外的模板,我能想到的唯一干净解决方案是create your own loader

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

答案 1 :(得分:4)

您可以通过以下方式添加更多路径: https://symfony.com/doc/3.4/templating/namespaced_paths.html

config.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>

答案 2 :(得分:3)

您可以将路径添加到Twig加载程序(Filesystem loader) 看到Fabien的最后回复(addPath方法是你需要的) https://github.com/symfony/symfony/issues/1912

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:0)

可以通过符号链接。

Symfony3的示例

来自src/AppBundle/Resources/views/Admin

Ubuntu:

ln -s ./../../../../../web/admin/_index-import-body.html index-import-body.html.twig

Windows:

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' %}