Импорт содержимого между файлами Twig

Как я могу получить файл 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.

3

Решение

Когда ты 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') }}
5

Другие решения

Попробуй это:

 {% include 'StockBundle:Stock:import.list.html.twig' %}

вместо:

 {% include 'import.list.html.twig' %}

http://symfony.com/doc/current/book/templating.html#including-templates

4

По вопросам рекламы [email protected]