Включение файла без ветки из ветки

Мне нужно включить содержимое файла (внутри папки моих ресурсов) внутри шаблона Twig.

Я пробовал это без везения:

{% include 'public/directory/file.ext' %}

Разве Twig не способен на это? (Я не хочу использовать Assetic)


person David Morales    schedule 20.12.2011    source источник


Ответы (4)


Некоторое время назад я сделал комплект специально для этого. Это в значительной степени оболочка для file_get_contents.

Настройки можно найти здесь.

person kgilden    schedule 20.12.2011
comment
Создание расширения Twig — это путь. Я реализовал один на основе вашего пакета, но если у кого-то нет времени или знаний для этого, ваш пакет — хорошее решение. Спасибо. - person David Morales; 21.12.2011
comment
Просто улучшение для вашего расширения: когда вы вызываете файл из шаблона, вы заметите, что вывод экранирован (если у вас включен автоэкран), поэтому вам придется добавить необработанный фильтр. Чтобы этого избежать, добавьте это в качестве третьего параметра вызова Twig_Function_Method: array('is_safe' =› array('html')) - person David Morales; 21.12.2011
comment
@gilden, где в вашем репозитории находится composer.json? - person Besnik; 25.07.2014

Новое в версии 1.15: функция источника была добавлена ​​в Twig 1.15. Исходная функция возвращает содержимое шаблона без его рендеринга.

http://twig.sensiolabs.org/doc/functions/source.html

person Disparity    schedule 19.08.2014
comment
Это работает, только если вы читаете шаблон. Это не позволяет включать произвольные файлы. - person afilina; 04.01.2018

Twig будет жаловаться при загрузке вашего файла, если он не является допустимым шаблоном twig. Причина в том, что Twig будет включать визуализированный файл, а не его содержимое (найдено здесь).

Вы можете попробовать с оператором use, но я не думаю, что это сработает.

Более того, синтаксис, который вы используете, кажется неверным. Когда я включаю (или использую) другой шаблон ветки, я использую этот синтаксис:

{% use "AcmeWebsiteBundle::include.html.twig" %}

И файл include.html.twig находится в src\Acme\WebsiteBundle\Resources\views\include.html.twig. Итак, если ваш файл находится в src\Acme\WebsiteBundle\Resources\public\directory\include.ext, вы можете попробовать

{% use "AcmeWebsiteBundle::..\public\directory\include.ext" %}

Если это не сработает, вы можете переместить файл в папку представлений. Если это невозможно, вы можете вставить app\Resources\views\ и использовать синтаксис:

{% use "::include.ext" %}

Если оператор использования не работает, чего я боюсь, вы можете напрямую обернуть свой файл в шаблон ветки. Я создаю несколько простых структур JSON с веткой. Таким образом, у вас может быть способ включить содержимое file.ext в шаблон ветки, а затем отобразить его.

Если все это не сработает, вам придется создать расширение Twig, которое добавит новый тег (что-то вроде content), который будет читать файл и выводить его содержимое в ваш шаблон twig.

{% content 'public/directory/file.ext' %} {# would put content of the file #}

Надеюсь, это поможет вам включить ваш файл.

С уважением,
Мэтт

person Matt    schedule 20.12.2011
comment
Я ценю ваш ответ, но ваши предложения не работают. Пожалуйста, если вы отвечаете, по крайней мере, вы должны быть уверены, что то, что вы предлагаете, работает. - person David Morales; 21.12.2011