Включая файл без ветки от ветки - PullRequest
7 голосов
/ 20 декабря 2011

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

Я попробовал это без удачи:

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

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

Ответы [ 4 ]

13 голосов
/ 19 августа 2014

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

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

3 голосов
/ 21 декабря 2011

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

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

1 голос
/ 07 мая 2016

Вы можете решить эту проблему с помощью функций расширения веток. (http://symfony.com/doc/current/cookbook/templating/twig_extension.html)

Создайте php-файл в вашем комплекте для расширения 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>
1 голос
/ 20 декабря 2011

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), который будет читать файл и выводить его содержимое в шаблон веточки.

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

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

С уважением,
Matt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...