Файл twig что это
Русскоязычная документация по Twig - PHP шаблонизатору. Руководство по Твиг на русском языке
В этой главе описывается API для Twig, a не язык шаблонов. Это будет наиболее полезным в качестве ссылки для тех, кто реализует интерфейс шаблонов для приложений , а не тем, кто создает шаблоны Twig.
История создания
Twig был написан в 2008 году австрийским разработчиком Армином Ронахером, как обработчик шаблонов с открытым исходном кодом, созданный на языке программирования php. Вскоре он занялся разработкой на Python и больше не возвращался к шаблонизатору. Однако труды были не напрасны. Идею Twig поддержал и развил ведущий разработчик фреймворка Symfony - Фабьен Потенсье.
Поколдовав над кодом и написав всю необходимую документацию, он пришел к выводу, что код вполне целостен и библиотеку можно показать публично. В своём личном блоге Фабьен отметил: «Twig не только один из самых функциональных шаблонизаторов, но и самый быстрый».
Именованные аргументы
Использование именованных аргументов помогает понять значение переменных, которые вы передаете как аргументы.
Именованные аргументы также позволяют пропустить некоторые аргументы, для которых вы не хотите изменять значение по умолчанию:
Вы также можете использовать позиционные и именованные аргументы в одном вызове, и в этом случае позиционные аргументы должны идти впереди именованных аргументов.
Каждая страница документации по функциям и фильтрам имеет раздел, где имена всех аргументов выписаны, если они поддерживаются.
Подключение Twig и рендер первого шаблона
Один из самых простых способов установки — скачать компонент с GitHub. Далее следует распаковать архив и каталог lib поместить в папку с рабочим проектом.
Всё необходимое для того, чтобы подключить Twig находится в файле index.php. В каталоге templates размещены файлы шаблонов. В нашем случае base.html и books.html. compilation_cache используется для хранения php-файлов, созданных шаблонизатором для работы.
1. Подключаем Twig.
2. Сообщаем шаблонизатору местонахождение шаблонов. В качестве аргумента передаем путь к папке templates.
3. Создаем объект шаблонизатора, указав необходимые опции cache и auto_reload.
Параметру cache передается путь к папке compilation_cache.
Вторую опцию активируем, прописав true. Это необходимо при обновлении страницы, чтобы Twig заново обработал шаблон. В противном случае шаблонизатор закеширует страницы. В будущем, после завершения работы над сайтом, данную опцию можно отключить.
4. Для наглядной работы с шаблонизатором сформируем небольшой массив со списком книг вида ключ-значение.
5. Используем метод render() для передачи данных в шаблон и вывода html результата.
Аргументы: название файла шаблона и созданный ранее массив.
Общий вид файла:
6. Настройка base.html (базовый шаблон)
Наследование шаблонов позволяет вынести общие элементы сайта, такие как header, footer, sidebar в базовый шаблон. Он определяет костяк html-документа. Каждый блок, в свою очередь, может быть переопределен дочерним шаблоном.
В нашем примере два блока: title и content.
7. Настройка books.html (дочерний шаблон)
a) указываем родительский шаблон
б) вписываем название дочерней страницы в наш блок title. Оно появится между тегам title в base.html
в) заполняем содержание, оно будет помещено в блок content базового шаблона
Цикл for проходится по данным, которые были переданы в шаблон посредством метода render(). Для извлечения значений необходимо обратиться к элементам по их ключам. В нашем случае это: > и > .
Выстраивается следующая цепочка:
Срабатывает метод $twig->render('books.html', array('books' => $books))
Twig подгружает шаблон books.html и формирует html-содержание
Распознает, что books.html это дочерний шаблон base.html и помещает туда сформированное содержание
Шаблонизатор возвращает полноценную страницу html
Включение других шаблонов
Тэг include используется для включения шаблона и включению использованного контента к текущему:
По умолчанию включенные шаблоны передаются в текущий контекст.
Контекст, который передается во включенный шаблон включает переменные, определенные в шаблоне:
Включенный шаблон render_box.html может получить доступ к box.
Имя файла шаблона зависит от загрузчика шаблона. Например, Twig_Loader_Filesystem позволяет получить доступ к другим шаблонам по имени. Вы можете включить шаблоны в ниже лежащих директориях используя знак слэша:
Это поведение зависит от приложения, в которое встраивается Twig.
Основы
Twig использует центральный объект, называемый environment (класс Twig_Environment). Экземпляры этого класса используются для хранения конфигурации и расширений и используются для загрузки шаблонов из файловой системы или других мест.
Большинство приложений создает один объект Twig_Environment при инициализации приложения и использует его для загрузки шаблонов. В некоторых случаях, однако, полезно иметь несколько сред совместно (рядом друг с другом), если используются различные конфигурации.
Самый простой способ конфигурировать Twig - это загрузить шаблоны для вашего приложения, что выглядит примерно так:
Это создаст среду шаблона с настройками по умолчанию и загрузчик, который ищет шаблоны в папке /path/to/templates/. Также доступны различные загрузчики и вы можете написать свой собственный, если вы хотите загрузить шаблоны из базы данных или других ресурсов.
Обратите внимание, что вторым параметром окружающей среды является массив опций. Опция cache есть компилирование директории кэша, где Twig кэширует скомпилированные шаблоны чтобы избежать парсинга для дополнительных запросов. Это отличается от кэша , который вы возможно хотите добавить для уже вычисленных шаблонов.
При такой необходимости, вы можете использовать любую доступную PHP библиотеку кэширования.
Для загрузки шаблона из этой среды вам просто нужно вызвать loadTemplate() метод, который возвращает затем экземпляр Twig_Template:
Чтобы передать переменные в шаблон, вызовите метод render():
Метод display() это наиболее простой метод вывести шаблон явно.
Вы можете также загрузить и воспроизвести шаблон одновременно:
Операторы проверки
Оператор is выполняет тесты. Тесты могут быть использованы для тестирования переменной в отношении общего выражения. Правый операнд является именем теста:
Тесты также используют аргументы:
Тесты могут быть инвертированы при использовании is not оператора:
Перейдите на страницу tests чтобы узнать больше о встроенных тестах.
Циклы и условия в Twig
В Twig есть такие базовые конструкции как циклы и условия. В примере с выводом книг был задействован цикл for:
Одной из особенностей шаблонизатора является использование оператора двоеточие (..). Это альтернатива range в php для создания массива, содержащего диапазон элементов.
Пример перебора цифр:
То же самое можно проделать с буквами.
Кроме того, полезной является возможность добавить условие в определение цикла.
Пример - фильтрация продуктов по цене:
Условия, поддерживаемые Twig: if, elseif, if not и else:
Расширение оптимизации
Расширение optimizer оптимизирует древо узлов до компиляции:
По умолчанию все оптимизации включены. Вы можете выбрать те, которые вы хотите активировать путем передачи их в конструктор:
Изучая фреймворк Symfony, рано или поздно вы столкнетесь с таким понятием как шаблонизатор. Давайте сейчас будем разбираться с тем, что такое шаблонизатор и зачем он нужен.
В Symfony используется такой шаблонизатор, который называется Twig. На самом деле Twig - это не единственный шаблонизатор, который мы с вами можем использовать. Вы можете использовать любой другой шаблонизатор.
Но, по умолчанию, в Symfony используется именно шаблонизатор Twig.
Давайте будем разбираться, зачем нам нужен шаблонизатор и для каких целей он используется.
Если мы с вами вспомним модель MVC (модель - вид - контроллер), о которой мы с вами говорили несколько ранее, то шаблонизатор - это то, что относится к части "Вида".
Как вы помните, задача вида у нас представить данные, которые будут выданы по запросу пользователя. Точно также шаблонизатор. Его основная задача представить данные для отображения пользователю.
Файл шаблонизатора - это обычный текстовый файл. Для Twig этот файл имеет 2 расширения.
Это означает то, что этот файл у нас содержит HTML-разметку и во вторых этот файл является служебным файлом шаблонизатора Twig.
По сути, в этом файле у нас содержаться 2 части: обычный html-код с простыми html-тэгами, встроенные стили CSS, встроенный Javascript-код и.т.д.
В отличии от обычной html-страницы, дополнительно к разметке документа там также выводятся определенные данные, которые могли быть переданы в него из контроллера. С помощью специальных конструкций, эти данные встраиваются в исходный twig-файл.
Данные на сервере могут меняться и автоматически они также меняются в twig файле. Т.е. мы получили html-страницу, которая содержит какие-то данные с веб-сервера.
Кроме данных в twig файле могут находиться какие-то служебные функции, которые упрощают представление этих данных.
Т.е. шаблонизатор - это что-то вроде некого шаблона и в этот шаблон мы можем передавать некие переменные, которые зависят от состояния нашего сервера.
Поэтому, шаблонизатор и происходит от слова "шаблон". Там содержится какая-то шаблонная страница, шаблонный html-код и в него вставляются переменные данные.
Т.е. шаблонизатор - это что-то вроде службы, которая подготавливает html-страницу со всеми необходимыми данными, которые отражают состояние нашего веб-сервера и возвращают эти данные контроллеру.
А контроллер уже возвращает готовый html-код тому посетителю сайта. который его запросил.
Таким образом это работает. Надеюсь, что стало понятнее что такое шаблонизатор и для чего он нужен и теперь можно приступить к рассмотрению конкретных примеров по работе с этим инструментом.
1) Попробуйте найти в Сети информацию о том, какие еще есть шаблонизаторы, кроме Twig. Напишите их название в комментарии под этим видео.
2) Создайте отдельный раздел в своей базе знаний программиста (решение, которое использую я), который будет называться Twig. Вам еще не раз придется к нему обращаться на практике.
Русскоязычная документация по Twig - PHP шаблонизатору. Руководство по Твиг на русском языке
Этот документ описывает синтаксис и семантику шаблона и будет наиболее полезен для тех, кто создает шаблоны TWIG.
Функции
Можно вызывать функции чтобы генерировать контент. Функции могут быть вызваны по имени со скобками после него и могут иметь аргументы.
Например, функция range возвращает список, содержащий арифметическую прогрессию целых чисел:
Чтобы узнать больше о встроенных функциях зайдите на страницу functions.
Присвоение переменных
Вы можете придать значения переменных внутри блоков кода. Присвоения используют тег set :
Литеры
Самой простой формой выражений являются литералы. Литералы представлены для таких типов PHP, как строки, числа и массивы. Существуют следующие литералы:
- "Hello World" : Все между двумя двойными или одинарными кавычками является строкой. Они полезны, когда вам нужна строка в шаблоне (например, как аргументы функций,фильтры или для того чтобы просто расширить или включить шаблон). Строка может содержать разделитель, если ему предшествует обратный слеш () -- как в 'It's good'
- 42 / 42,23 : Целые числа и числа с плавающей точкой создаются написанием чисел . Если точка есть в числе то это float, в противном случае integer.
- ["foo", "bar"] : Массивы определяются последовательностью выражений, разделенных запятыми (,) и окруженных квадратными скобками ([]).
- : Хэши определяется списком ключей и значений, разделенных запятыми (,) и взятых в фигурные скобки (<>):
- true/false : true представляет истинное значение, false представляет ложное значение.
- null : null не представляет никакого определенного значения. Это значение возвращается, когда переменной не существует. none является синонимом null.
Массивы и хэши могут быть вложенными:
Использование двойных кавычек или одиночных кавычек не имеет никакого ьвлияния на производительность, но строки интерполяции поддерживается только для строк в двойных кавычках.
Экранирование HTML
При генерации HTML из шаблонов всегда есть риск , что переменная будет включать символы, которые будут влиять на конечный HTML. Существует два подхода: вручную сохранять каждую переменную или автоматически сохранить все по умолчанию.
Twig поддерживает оба, автоматическое сохранение включено по умолчанию.
Автоматическое сохранение поддерживается только если расширение escaper включено (что так и есть по умолчанию).
Работа с экранированием вручную
Если сохранение вручную включено, это ваша обязанность сохранить все переменные если это нужно. Что нужно сохранить? Все переменные, которым вы не доверяете.
Сохранение работает , если пропустить переменную через escape или e фильтр:
По умолчанию, фильтр escape использует html метод, но в зависимости от сохраняемого контекста, вы возможно захотите использовать другие методы:
Автоматическое экранирование
Вне зависимости от того, включено ли автоматическое сохранение или нет, вы можете выделить секцию шаблона, которую нужно или не нужно сохранить, используя тег autoescape:
По умолчанию, авто-сохранение сохраняет html. Если выводить переменные в других контекстах, нужно явно сохранить их, используя подходящий метод:
Экранирование
Иногда желательно или даже необходимо заставить Twig игнорировать те части, которые в противном случае он воспримет как переменные или как блоки.
Самым простым способом для вывода переменной разделитель
Вычисления
Twig позволяет оперировать значениями. Это редко используется в шаблонах, но существует ради полноты. Поддерживаются следующие операторы:
- + : Добавляет два объекта вместе (операнды преобразованы в числа). > равно 2.
- - : Вычитает второе число из первого. > равно 1.
- / : Деление двух чисел. Возвращенное значение будет числом с плавающей точкой. > есть 0,5.
- % : Вычисляет остаток от целочисленного деления. > есть 4.
- // : Деление двух чисел и возвращает (в виде дроби) целый результат. > = 2 , > является -3
- * : Умножает левый операнд на правый. > возвратится 4.
- ** : Генерирует левый операнд в степень правого операнда. > возвратится 8.
Зачем нужен еще один шаблонизатор?
Twig использует гибко настраиваемые лексический и грамматический анализаторы. Это позволяет разработчику определять свои теги и фильтры, создавать собственный DSL.
Краткость: Язык PHP многословен и даже слишком многословен, когда нужно экранировать вывод данных:
echo $var; echo htmlspecialchars($var, ENT_QUOTES, 'UTF-8');
Twig имеет более лаконичный синтаксис, который позволяет легко читать шаблоны:
Ориентированный на шаблоны синтаксис: Twig имеет сокращения для многих общих паттернов, например, отображение текста по умолчанию, если вы перебираете пустой массив:
Полнофункциональный: поддерживает все, что необходимо для использования шаблонов: множественное наследование, блоки, автоматическое экранирование и многое другое:
Легок в изучении: Синтаксис прост в изучении и оптимален для верстальщиков, что позволяет им быстро выполнять свою работу.
Конечно, для PHP написано большое число шаблонизаторов. Но большинство из них написаны под PHP4 и не используют лучшие практики разработки:
- Расширяемость: Твиг это гибкий движок для любых ваших потребностей, даже самых сложных. Благодаря открытой архитектуре, вы можете определять новые языковые конструкции (тэги и фильтры) для создания своего собственного DSL.
- Юнит-тестирование: Твиг полностью покрыт тестами. Библиотека стабильна и готова к использованию в больших проектах.
- Документация: Tвиг полностью документирован, вся документация доступна на сайте, и, конечно, имеет полное описание API.
Безопасность: В отношении безопасности, имеется несколько совершенно уникальных особенностей:
- Автоматическое экранирование вывода: Для безопасного вывода данных, вы можете включить экранирование как глобально, так и для отдельных блоков: .
- Песочница: Twig позволяет использовать для любого шаблона "песочницу", где пользователи имеют ограниченный набор тэгов, фильтров и методов объектов, определенных разработчиком. Режим "песочницы" может быть включен как глобально, так и локально, для определенных шаблонов: >
Использование расширений
Расширения Twig - это пакеты, которые добавляют новые функции в Twig. Использование расширений так же просто, как с помощью метода addExtension ():
Twig поставляется в комплекте со следующими расширениями:
Расширения сore, escaper и optimizer не нужно добавлять к среде Twig environment, так как они выставлены по умолчанию.
Особенности Twig
К основным особенностям шаблонизатора относятся:
высокая скорость работы
наследование шаблонов (возможность определить базовый и дочерние шаблоны)
понятный и компактный синтаксис
оптимизированный php код
безопасный режим «песочницы» (пользователи имеют ограниченный набор тегов, фильтров и методов объектов, определенных разработчиком )
возможность создания и использования макросов
полностью документирован (и API тоже)
Загрузчики
Загрузчики отвечают за загрузку шаблонов из такого ресурса, как файловая система.
Все загрузчики шаблонов могут кэшировать компилированные шаблоны в файловой системе для дальнейшего использования. Это значительно ускоряет Twig, поскольку шаблоны компилируются только один раз и увеличение производительности даже больше, если бы вы использовали ускоритель PHP, такой как APC. Смотрите cache и auto_reload опции Twig_Environment выше для получения подробной информации.
Вот список встроенных загрузчиков, которые дает Twig:
Новое в версии 1.10: prependPath() и поддержка пространства имен были добавлены в Twig 1.10.
Twig_Loader_Filesystem загружает шаблоны из файловой системы. Этот загрузчик может находить шаблоны в папках файловой системы и это предпочтительный способ для их загрузки:
Он может также искать шаблоны в массиве директорий:
При такой конфигурации Twig будет сначала искать шаблоны в $templateDir1 и если они не существуют, и он будет искать их в $templateDir2.
Вы можете добавить или вставить каналы (пути) с помощью методов addPath() и prependPath().
Загрузчик файловой системы также поддерживает шаблоны пространства имен. Это позволяет группировать ваши шаблоны под различными пространствами имен, которые имеют их собственные пути шаблонов.
Используя методы setPaths(), addPath(), и prependPath(), определите пространство имен как второй аргумент ( если нет определения, то эти методы действуют на пространстве имени "main").
Шаблоны пространства имен могут быть доступны через специальное обозначение @namespace_name/template_path:
Twig_Loader_String загружает шаблоны из строк. Это является простейшим загрузчиком, поскольку ссылка на шаблон является кодом шаблона:
Этот загрузчик следует использовать только для unit-тестирования , поскольку он имеет строгие ограничения: несколько тегов, такие как extends или include не имеет смысла использовать, поскольку ссылка на шаблон сама является кодом источника шаблона.
Twig_Loader_Array загружает шаблон из PHP массива. Это передается ограничением массива строк до имен шаблонов.
Этот загрузчик очень полезен для unit-тестирования. Он также может быть использован для малых проектов, где хранение всех шаблонов может иметь смысл в одном PHP файле.
Когда вы используете загрузчики массива строк с механизмом кэша, вам следует знать, что новый ключ кэша генерируется каждый раз в содержание шаблона "меняется" (ключ кэша является кодом-исходником шаблона). Если вы не хотите видеть, что ваш кэш переполняется, вам нужно позаботиться об очистке файла кэша самому.
Twig_Loader_Chain перенаправляет загрузку шаблонов к другим загрузчикам:
При поиске шаблона Twig будет пробовать каждый загрузчик по очереди и он будет возвращаться как только шаблон найдется. При рендеринге шаблона index.html из вышеуказанного примера, Twig будет пытаться загрузить его с помощью $loader2, но base.html будет загружен из $loader1.
Twig_Loader_Chain принимает любой загрузчик, который реализует Twig_LoaderInterface .
Вы также можете добавить загрузчики с помощью addLoader() метода.
Комментарии
Чтобы закомментировать часть строки шаблона, используйте комментарий . Это полезно для отладки или для добавления информации для других разработчиков или для себя:
Управление пробелами
Первая новая строка после тега шаблона удаляется автоматически (как в PHP). Пробелы больше не изменяются механизмом шаблонов, поэтому каждый пробел (пробелы, табуляции, новые строки и т.д.) возвращается без изменений.
Вы также можете контролировать пробелы на уровне тегов. Используя модификаторы управления пробелами в ваших тегах, вы можете обрезать начальные и / или конечные пробелы.
Twig поддерживает два модификатора:
- Обрезка пробелов с помощью модификатора - : удаляет все пробелы (включая переводы строк);
- Обрезка пробелов строк с помощью модификатора ~ : Удаляет все пробелы (за исключением новых строк). Использование этого модификатора справа отключает удаление по умолчанию первой новой строки, унаследованной от PHP.
Модификаторы можно использовать с любой стороны тегов, например, и они занимают все пробелы для этой стороны тега. Можно использовать модификаторы на одной стороне тега или на обеих сторонах:
В дополнение к модификаторам пробелов, Twig также имеет фильтр spaceless , который удаляет пробелы между тегами HTML:
Метка apply была введена в Twig 2.9; используйте тег filter с предыдущими версиями.
Фильтры в Twig
Фильтры – более продвинутые средства Twig. Эти инструменты позволяют форматировать данные перед выводом, определять в каком формате и как будет передана информация в шаблон. Вот несколько из них:
Date и date_modify - форматируют и модифицируют дату
Format - преобразует placeholder’ы, строки, которые начинаются со знака %, заменяя на подставляемые значения.
Striptags - удаляет html теги, все пробелы, находящиеся рядом, заменяет одним.
Escape - экранирует строку для безопасного отображения.
Строка интерполяции
Строка интерполяции была добавлена в Twig 1.5.
Выражения
Twig позволяет выражения везде. Такая работа очень похожа на обычный PHP и даже если вы не работаете с PHP, вы почувствуете себя с ним комфортно.
Логика
Вы можете объединить несколько выражений со следующими операторами:
- and : Возвращает истину, если левый и правый операнды оба истинны.
- or : Возвращает истину, если левый или правый операнд истинны.
- not : Отрицает выражение.
- (expr) : Групипровка вырожений.
Twig также поддерживает побитовые операторы (b-and, b-xor, and b-or).
Заключение
Twig – это мощное средство для создания шаблонов сайта, которое хорошо документировано и полностью протестировано. Он особенно полезен для командного ведения проекта, позволяя комфортно работать программистам и frontend-разработчикам.
Фильтры
Переменные могут быть изменены с помощью фильтров filters. Фильтры отделяются от переменных с помощью pipe-символа (|) и могут иметь дополнительные аргументы в скобках. Можно объединять несколько фильтров. Выход одного фильтра направляется в следующий.
Следующий пример удаляет все HTML-теги и title из name:
Фильтры, которые принимают аргументы,имеют круглые скобки вокруг аргументов. Этот пример присоединит список, разделенный запятой.
Чтобы применить фильтр для секции в коде, оберните его с тегом filter:
Чтобы узнать больше о встроенных фильтрах зайдите на страницу filters.
Сравнения
Следующие операторы сравнения поддерживаются в любом выражении: == , != , < , >, >= и
Вы также можете проверить, если строка начинается или заканчивается другой строкой:
Для сложных сравнений строк, оператор matches позволяет вам использовать регулярные вырожения:
Создайте свой собственный загрузчик
Все загрузчики реализуют Twig_LoaderInterface:
В качестве примера, так выглядит встроенный Twig_Loader_String:
Метод isFresh() должен вернуть true, если текущий шаблон в кэше еще свежий, учитывая время последнего изменения или false в противном случае.
C Twig 1.11.0 можно также реализовать Twig_ExistsLoaderInterface, чтобы сделать ваш загрузчик быстрее при использовании с цепочкой загрузчиков.
Наследование шаблонов
Наиболее мощное средство Twig это наследование шаблонов. Оно позволяет вам построить базовый "скелет" шаблона,который содержит все общие элементы вашего сайта и определяет блоки, которые дочерние шаблоны могут замещать.
Звучит сложно, но на самом деле все очень просто. Это легко понять с помощью следующего примера.
Давайте определим базовый шаблон, base.html, который определяет простой HTML скелетный документ, который вы можете использовать для простой страницы с двумя колонками:
В этом примере, теги block определяют четыре блока , которые дочерние шаблоны могут занять. Все , что делает тег block это то, что он говорит механизму шаблонов,что ребенок может замещать те части шаблона.
Шаблон-потомок может выглядеть так:
Тег extends очень важен здесь. Он говорит механизму шаблонов, что этот шаблон "расширяет" другой шаблон. Когда система шаблонов вычисляет этот шаблон, сначала он ищет родителя. Тег extends должен быть первым тегом в шаблоне. Следует заметить, что так как шаблон-ребенок не определяет блок footer , используется значение из родительского шаблона.
Возможно передать содержание родительского шаблона используя функцию parent.
Это дает результаты родительского блока:
Глобальные переменные
Следующие переменные всегда доступны в шаблонах:
- _self : ссылается на текущий шаблон;
- _context : ссылается на текущий контекст;
- _charset : ссылается на текущую кодировку.
Интеграция со средами разработки.
Многие среды разработки поддерживают подсветку синтаксиса и автодополнение для TWIG.
- Textmate с помощью Twig bundle
- Vim с помощью Jinja syntax plugin или vim-twig plugin
- Netbeans с помощью Twig syntax plugin (до версии 7.1, нативно , начиная с версии 7.2)
- PhpStorm (нативно , начиная с версии 2.1)
- Eclipse с помощью Twig plugin
- Sublime Text с помощью Twig bundle
- GtkSourceView с помощью Twig language definition (используется в gedit и других проектах)
- Coda иSubEthaEdit с помощью Twig syntax mode
- Coda 2 с помощью other Twig syntax mode
- Komodo и Komodo Edit с помощью Twig highlight/syntax check mode
- Notepad++ с помощью Notepad++ Twig Highlighter
- Emacs с помощью web-mode.el
Кто создал Twig?
Twig написан Fabien Potencier, создателем фреймворка Symfony и распространяется по новой лицензии BSD.
Расширения
Twig может быть легко расширен.
Если вы ищете новые теги, фильтры или функции, посмотрите это в официальном хранилище расширений Twig extension repository.
Если вы хотите создать свой собственный, прочтите главу Creating an Extension.
Twig как шаблонизатор по синтаксису чем-то похож на Smarty и не уступает в гибкости XSLT.
Основные его особенности:
- Быстрый: компилирует шаблоны в PHP код. Добавочный, относительно нативного PHP, код был сведен к минимуму.
- Безопасный: есть режим «песочницы» для проверки сомнительного кода в шаблонах. Это позволяет использовать Twig в качестве языка шаблонов для приложений, где пользователи могут менять дизайн шаблонов.
- Гибкий: основан на пластичном лексере и парсере. Это позволяет разработчику определять свои собственные тэги и фильтры, создавать свой DSL.
Расширение Sandbox
Расширения «песочницы» могут быть использованы для оценки небезопасного кода. Доступ к небезопасным свойствам и методам запрещен.
Безопасность «песочницы» регулируется policy instance. По умолчанию Twig обладает лишь одной классовой политикой: Twig_Sandbox_SecurityPolicy. Этот класс позволяет внести в «белый» список некоторые тэги, фильтры, значения и методы:
С такими настройками вы можете использование лишь тег if и фильтр upper. Кроме того, шаблоны будут способны вызывать только методы getTitle() и getBody() в объекте Article а title и body становятся общедоступными свойствами. Все остальные методы и свойства будут запрещены, и при обращении к ним будет генерировать Twig_Sandbox_SecurityError исключение.
Объект policy является первым аргументом конструктора Sandbox:
По умолчанию режим Sandbox отключен и его следует включить, когда включается ненадежный код шаблона тега sandbox:
Вы можете изолировать все шаблоны передавая true как второй аргумент для конструктора расширения:
Расширение Escaper
Расширение escaper добавляет автоматическое сохранение вывода в Twig. Это определяет тег autoescape и фильтр raw.
При создании расширения сохранения, вы можете включить или выключить вывод глобального сохранения:
Если установлено HTML, все переменные в шаблонах будут сохранены (с помощью HTML стратегии сохранения), за исключением тех, которые используют фильтр raw:
Вы также можете изменить режим сохранения локально с помощью тега autoescape (смотрите autoescape документ для синтаксиса, используемого до Twig 1.8):
Правила сохранения реализуются следующим образом:
- Литералы (целые числа, логические значения, массивы, . ) используются в шаблоне непосредственно как переменные или аргументы фильтра, которые никогда не сохраняются автоматически:
- Выражения, результатом которых всегда являются литерал или переменная, помечаются как безопасные и никогда автоматически не сохраняются:
- Сохранение применяется перед печатью, после любого другого фильтра:
- Грубый фильтр следует использовать только в конце цепочки фильтров:
- Автоматическое сохранение не применяется, если последний фильтр в цепочке помечен как безопасный для текущего контекста (например, html или js). escape и escape('html') отмечен безопасным для HTML, escape('js') отмечен безопасным для JavaScript, raw отмечен безопасным для всего остального.
Обратите внимание, что автосохранение имеет некоторые ограничения, такое как сохранение, применимое для выражений после вычисления. Например, при работе с конкатенацией, не дает ожидаемого результата, так как сохранение применяется к результату конкатенации, а не к отдельным переменным (так, raw фильтр не будет никак влиять здесь).
Реализация
Для удобства foo.bar делает следующие вещи на уровне PHP:
- проверяет является ли foo массивом и bar верным выражением;
- если нет, и foo является объектом, проверяется что bar является допустимым свойством
- если нет, и foo является объектом, проверяется что bar является допустимым методом (даже если bar является конструктором - используйте use__construct() вместо этого)
- если нет, и foo является объектом, проверяется что getBar является допустимым методом
- если нет, и foo является объектом, проверяется что isBar является допустимым методом
- если нет, то возвращает значение null
С другой стороны, foo['bar'] работает только с массивами PHP:
- проверяется, является ли foo массивом и bar допустимым элементом
- если нет , то возвращает значение null
Если вы хотите получить динамический атрибут для переменной, используйте функцию attribute вместо этого.
Встроенные расширения
В этом разделе описываются функции, добавленные с помощью встроенных расширений.
Прочитайте главу о расширении Twig чтобы узнать, как создавать свои собственные расширения.
Макросы
поддержка значений аргументов была добавлена по умолчанию в Twig 1.12.
Макросы сравнимы с функциями в обычных языках программирования. Они полезны для повторного использования часто используемых HTML - фрагментов чтобы не повторять себя. Макрос определяется через macro теги. Вот небольшой пример (впоследствии называемый forms.html) макроса, который представлен в виде элемента формы:
Макрос может быть определен в любом шаблоне, и должен быть "импортирован" через тег import до использования:
Кроме того, вы можете импортировать отдельные имена макросов из шаблона в текущее пространство имен с помощью тега from или дать им имя:
По умолчанию значение также может быть определено для макро аргументов прямо в вызове макроса:
Оформление кода
Правило 2. Не ставить пробелов:
после открытия круглой скобки и перед закрытием круглой скобки в выражениях
перед и после разделителей строк
перед и после следующих операторов: |, ., . []
перед и после круглой скобки, используемой для фильтра и вызовов функций
перед и после открытия и закрытия массивов и хэшей
Правило 3. В названиях переменных использовать маленькие буквы и символы подчеркивания.
Правило 4. Делать отступы внутри тегов.
Краткий обзор
Шаблон - это просто текстовый файл. Он может генерировать любой текстовый формат (HTML, XML, CSV, Latex, и т.д.). Он не обязан иметь особого расширения, .html, или .xml расширения подойдут.
Шаблон содержит переменные или выражения, которые будут заменяться значениями, когда шаблон вычисляется, и теги, которые контролируют логику шаблона.
Ниже приводится минимальный шаблон, который иллюстрирует основы. Мы рассмотрим детали позже:
Есть два вида разделителей: И >. Первый из них используется для выполнения операторов, таких как for-циклы , последний печатает результат выражения в шаблон.
Другие операторы
Поддержка расширенного тройного оператора была добавлена в Twig 1.12.0.
Следующие операторы очень полезны, но не вписываются ни в какую из категорий:
- .. : Создает последовательность, основанную на операнде до и после оператора.
- | : Применяет фильтр.
- ~ : Преобразует все операнды в строки и объединяет их. Hello ! вернется (при условии, имя является «John») Hello John!.
- . , [] : Получает атрибут объекта.
- ? : : Тернарный оператор оператор: >
Основы
Twig использует центральный объект, называемый environment (класс Twig_Environment). Экземпляры этого класса используются для хранения конфигурации и расширений и используются для загрузки шаблонов из файловой системы или других мест.
Большинство приложений создает один объект Twig_Environment при инициализации приложения и использует его для загрузки шаблонов. В некоторых случаях, однако, полезно иметь несколько сред совместно (рядом друг с другом), если используются различные конфигурации.
Самый простой способ конфигурировать Twig - это загрузить шаблоны для вашего приложения, что выглядит примерно так:
Это создаст среду шаблона с настройками по умолчанию и загрузчик, который ищет шаблоны в папке /path/to/templates/. Также доступны различные загрузчики и вы можете написать свой собственный, если вы хотите загрузить шаблоны из базы данных или других ресурсов.
Обратите внимание, что вторым параметром окружающей среды является массив опций. Опция cache есть компилирование директории кэша, где Twig кэширует скомпилированные шаблоны чтобы избежать парсинга для дополнительных запросов. Это отличается от кэша , который вы возможно хотите добавить для уже вычисленных шаблонов.
При такой необходимости, вы можете использовать любую доступную PHP библиотеку кэширования.
Для загрузки шаблона из этой среды вам просто нужно вызвать loadTemplate() метод, который возвращает затем экземпляр Twig_Template:
Чтобы передать переменные в шаблон, вызовите метод render():
Метод display() это наиболее простой метод вывести шаблон явно.
Вы можете также загрузить и воспроизвести шаблон одновременно:
Расширениe ядра
Расширения ядра определяет все основные особенности Twig:
Зачем нужны шаблонизаторы?
Создание качественного продукта, будь то сайт или приложение — результат сплоченной работы целой команды. Это программисты, верстальщики, дизайнеры. Чем сложнее проект, тем важнее отделить его логику от представления. Только при успешном их разделении backend и frontend-разработчики смогут эффективно сотрудничать. Всего этого можно достигнуть благодаря шаблонизаторам.
На данный момент существует множество способов генерации конечных html-страниц. В том числе большое количество шаблонизаторов. Вот некоторые из них: Blade, Smarty, Twig, Volt. Мы остановимся подробнее на Twig.
Оператор in
Оператор in осуществляет проверку содержания.
Он возвращает true если левый операнд содержится в правом:
Вы можете использовать этот фильтр, чтобы выполнить проверку на содержание со строками, массивами или объектами, осуществляющих Traversable интерфейс.
Чтобы выполнить проверку на то, что левый операнд не содержится в правом, нужно использовать not in оператор.
Управляющая структура
Управляющая структура относится к тем вещам, которые управляют программой - условия (i.e. if/elseif/else), for-циклы и блоки. Управляющая структура появляется внутри блоков .
Например, чтобы показать список всех пользователей, которые записаны в переменной users , используйте тег for:
Тег if можно использовать чтобы проверить выражение:
Чтобы узнать больше о встроенных тегах зайдите на страницу tags.
Опции окружения.
При создании нового экземпляра Twig_Environment, вы можете передать массив опций как конструктор второго аргумента:
Доступны следующие опции:
- debug: При установке в true, генерируемые шаблоны имеют__toString() метод, который можно использовать для отображения сгенерированных узлов (по умолчанию false).
- charset: Кодировка, используемая в шаблонах (по умолчанию в UTF-8)
- base_template_class: Шаблон базового класса ,который используют для сгенерированных шаблонов (по умолчанию Twig_Template).
- cache: Абсолютный путь, где хранятся скомпилированные шаблоны или false чтобы отключить кэширование (который по умолчанию).
- auto_reload: При разработке с Twig, полезно повторно компилировать шаблон при изменении кода-исходника. Если вы не установили значение опции auto_reload, то она будет определена автоматически на основании переменной debug.
- strict_variables: Если установлено false, Twig будет по умолчанию игнорировать недействительные переменные (переменные и или атрибуты/методы, которые не существуют) и заменять их значением null. Когда устанавлено true, Twig генерирует исключение (по умолчанию false).
- autoescape: Если установить true, авто-сохранение будет разрешено по умолчанию для всех шаблонов (по умолчанию true). Начиная с Twig 1.8, вы можете выбрать какую методику сохранения использовать (html, js, false для блокировки). Начиная с Twig 1.9, вы можете выбрать какую методику сохранения использовать (css, url, html_attr, или обратный вызов PHP, который берет шаблон "имя файла" и должен вернуть методику сохранения для использования -- обратный вызов не может быть названием функции, чтобы избежать конфликта (коллизии) со встроенными методами сохранения. optimizations: Флаг, который указывает, какие оптимизации применять (по умолчанию -1 -- все оптимизации разрешены; установите его на 0 для отключения).
Переменные
Приложение передает переменные, с которыми вы можете работать в шаблоне. Переменные могут иметь атрибуты или элементы, к которым вы можете иметь доступ. Как выглядит переменная определяется приложением, которое ее предоставило. Вы можете использовать точку (.) чтобы получить доступ к атрибутам переменной (методы или свойства PHP-объекта или элементы PHP- массива), или так называемый индекс ([]):
Когда атрибут содержит специальные символы (такие как - что будет интерпретировано как оператор вычитания ), используйте функцию attribute вместо доступа к атрибуту переменной.
Важно знать,что фигурные скобки не являются переменной, а печатают предложение.
Если вы хотите получить доступ к переменным внутри тегов, не ставьте скобки.
Если переменная или атрибут не существует, вы получите значение null , когда опция strict_variables установлена false, в обратном случае Twig выбросит ошибку.
Читайте также: