在 Twig 文件之间导入内容
Import content between Twig files
我怎样才能拥有一个从同一目录或子目录中的第二个 Twig 文件导入部分内容的 Twig 文件?
我正在开发一个项目,其中多个 Twig 文件具有共同的内容,我试图避免在 Twig 文件之间复制和粘贴内容。
所以,我想要一个包含共享标记的子目录,并简单地 "import" 到主要 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 'StockBundle:Stock:import.list.html.twig' %}
而不是:
{% include 'import.list.html.twig' %}
http://symfony.com/doc/current/book/templating.html#including-templates
当你include
它需要知道它所在的命名空间。当您执行 ::
时,如 {% extends "::base.html.twig" %}
,它来自应用程序的 app/Resources/views
目录。
参见:Template Naming and Locations Symfony documentation
如果您的 import.list.html.twig
在捆绑包中,则必须正确定义它。例如,如果您在该捆绑包中有 StockBundle 和一个 Resources/views 目录及其自己的 base.html.twig
模板,您将有
{% include 'StockBundle::base.html.twig' %}
如果您在该包中有一个 Stock 文件夹(附加到您的 StockController)和一个 import.list.html.twig
模板,您将拥有
{% include 'StockBundle:Stock:import.list.html.twig' %}
通过 Registered Namespaced Twig Paths 注意,您也可以改用命名空间路径。它们实际上也更快。所以上面会是
{% include '@Stock/base.html.twig' %}
{% include '@Stock/Stock/import.list.html.twig' %}
这是 Symfony template best practices
的另一个很好的参考
注意
从 Symfony 2.2 开始,您可以使用 include()
function,这是包含模板的首选方式:
{{ include('@Stock/base.html.twig') }}
{{ include('@Stock/Stock/import.list.html.twig') }}
我怎样才能拥有一个从同一目录或子目录中的第二个 Twig 文件导入部分内容的 Twig 文件?
我正在开发一个项目,其中多个 Twig 文件具有共同的内容,我试图避免在 Twig 文件之间复制和粘贴内容。
所以,我想要一个包含共享标记的子目录,并简单地 "import" 到主要 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 'StockBundle:Stock:import.list.html.twig' %}
而不是:
{% include 'import.list.html.twig' %}
http://symfony.com/doc/current/book/templating.html#including-templates
当你include
它需要知道它所在的命名空间。当您执行 ::
时,如 {% extends "::base.html.twig" %}
,它来自应用程序的 app/Resources/views
目录。
参见:Template Naming and Locations Symfony documentation
如果您的 import.list.html.twig
在捆绑包中,则必须正确定义它。例如,如果您在该捆绑包中有 StockBundle 和一个 Resources/views 目录及其自己的 base.html.twig
模板,您将有
{% include 'StockBundle::base.html.twig' %}
如果您在该包中有一个 Stock 文件夹(附加到您的 StockController)和一个 import.list.html.twig
模板,您将拥有
{% include 'StockBundle:Stock:import.list.html.twig' %}
通过 Registered Namespaced Twig Paths 注意,您也可以改用命名空间路径。它们实际上也更快。所以上面会是
{% include '@Stock/base.html.twig' %}
{% include '@Stock/Stock/import.list.html.twig' %}
这是 Symfony template best practices
的另一个很好的参考注意
从 Symfony 2.2 开始,您可以使用 include()
function,这是包含模板的首选方式:
{{ include('@Stock/base.html.twig') }}
{{ include('@Stock/Stock/import.list.html.twig') }}