我怎样才能有一个 Twig 文件从同一目录或子目录中的第二个 Twig 文件导入一些内容?
我正在开发一个项目,其中多个 Twig 文件具有共同的内容,我试图避免在 Twig 文件之间复制和粘贴内容。
因此,我想拥有一个包含共享标记的子目录,并简单地"导入"到主 Twig 文件的相关部分中。
使用 import.list.html.twig 与主 Twig 文件位于同一目录中,我尝试了以下操作:
{% extends "::base.html.twig" %}
{% block title %}StockBundle:StockController:index{% endblock %}
{% block body %}
<h1>Welcome to the StockController:List page</h1>
{% for stock in stocks %}
<div class='list'>
<div class='each stock'>
<span class='name'>{{ stock.name }}</span>
<span class='desc'>{{ stock.description }}</span>
<span class='balc'>{{ stock.balance }}</span>
<span class='edit'>
<a href="{{ path('stock_edit', {'id':stock.id}) }}">edit</a>
</span>
</div>
</div>
{% endfor %}
{% include 'import.list.html.twig' %}
{% endblock %}
。但我收到以下错误:
Unable to find template "import.list.html.twig" in ::base.html.twig at line 10.
当你include
时,它需要知道它所在的命名空间。 当你执行::
时,如{% extends "::base.html.twig" %}
,它来自应用程序的app/Resources/views
目录。
参见:模板命名和位置 Symfony 文档
如果您的import.list.html.twig
在捆绑包中,则必须正确定义它。 例如,如果您在该捆绑包中有一个资源/视图目录,并且该捆绑包中有自己的base.html.twig
模板,您将拥有
{% include 'StockBundle::base.html.twig' %}
例如,如果您在该捆绑包中有一个 Stock 文件夹(附加到您的 StockController)和一个import.list.html.twig
模板,您将拥有
{% include 'StockBundle:Stock:import.list.html.twig' %}
请注意,通过注册的命名空间 Twig 路径,您也可以改用命名空间路径。 它们实际上也更快。 所以以上将是
{% include '@Stock/base.html.twig' %}
{% include '@Stock/Stock/import.list.html.twig' %}
这是Symfony模板最佳实践的另一个很好的参考
注意
从 Symfony 2.2 开始,您可以使用 include()
函数,这是包含模板的首选方式:
{{ include('@Stock/base.html.twig') }}
{{ include('@Stock/Stock/import.list.html.twig') }}
试试这个:
{% include 'StockBundle:Stock:import.list.html.twig' %}
而不是:
{% include 'import.list.html.twig' %}
http://symfony.com/doc/current/book/templating.html#including-templates