Мне нужно включить содержимое файла (внутри папки моих ресурсов) внутри шаблона Twig.
Я пробовал это без везения:
{% include 'public/directory/file.ext' %}
Разве Twig не способен на это? (Я не хочу использовать Assetic)
Мне нужно включить содержимое файла (внутри папки моих ресурсов) внутри шаблона Twig.
Я пробовал это без везения:
{% include 'public/directory/file.ext' %}
Разве Twig не способен на это? (Я не хочу использовать Assetic)
Некоторое время назад я сделал комплект специально для этого. Это в значительной степени оболочка для file_get_contents
.
Настройки можно найти здесь.
Новое в версии 1.15: функция источника была добавлена в Twig 1.15. Исходная функция возвращает содержимое шаблона без его рендеринга.
http://twig.sensiolabs.org/doc/functions/source.html
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 #}
Надеюсь, это поможет вам включить ваш файл.
С уважением,
Мэтт
Вы можете решить эту проблему с помощью функций расширения ветки. ( http://symfony.com/doc/current/cookbook/templating/twig_extension. HTMLа> )
Создайте файл php в вашем Bundle для расширения Twig.
<?php
namespace AppBundle\Twig;
use Twig_Extension;
use Twig_SimpleFunction;
class AppExtension extends Twig_Extension
{
public function getFunctions()
{
return array(
new Twig_SimpleFunction('fileGetContents', array($this, 'fileGetContents') ),
);
}
public function fileGetContents($file)
{
return file_get_contents($file);
}
public function getName()
{
return 'app_extension';
}
}
?>
Добавьте этот код в app/config/services.yml
app.twig_extension:
class: AppBundle\Twig\AppExtension
public: false
tags:
- { name: twig.extension }
Теперь вы можете использовать свою пользовательскую функцию как любую функцию по умолчанию в вашем шаблоне ветки.
<p>{{ fileGetContents( asset("uploads/my_text_file.txt") ) }}</p>