Как я могу получить файл 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
в связке, вы должны будете определить это правильно. Например, если у вас есть StockBundle и Ресурсы / просмотров каталог в этом комплекте со своим собственным base.html.twig
шаблон, вы бы имели
{% include 'StockBundle::base.html.twig' %}
Если бы вы имели, скажем, Склад папка внутри этого пакета (прикреплена к вашему StockController) и import.list.html.twig
шаблон, вы бы имели
{% include 'StockBundle:Stock:import.list.html.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