Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll

Обнаружение и проверка переменных в шаблонах Twig

04/05/2020, by maria

При работе с файлом шаблона Twig большинство переменных документируются в комментариях к файлу шаблона. Однако, когда это не так, или когда темы или модули вводят новые переменные, нам нужен способ обнаружить все переменные, доступные в рамках шаблона. Twig предоставляет функцию dump() для обнаружения и проверки переменных в файлах шаблонов.

Функция dump() не будет отображать вывод, если не включена отладка. Узнайте, как включить отладку Twig.

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

Проверка одной переменной

Если в вашем шаблоне есть переменная заголовка, следующее будет выводить его содержимое в ваш шаблон:

{{ dump(title) }}

Обнаружение всех доступных переменных в шаблоне

Чтобы вывести все доступные переменные и их содержимое в шаблон, добавьте в шаблон следующее (после включения отладки):

{{ dump() }}

Чтобы вывести только доступные переменные ключи, используйте:

{{ dump(_context|keys) }}

Во всех шаблонах Twig доступны дополнительные глобальные переменные:

  • _self ссылается на текущий шаблон и содержит расширенную информацию о шаблоне, то есть имя класса скомпилированного шаблона и информацию о среде Twig. _self устарела и удалена из Twig версии 2.x.
  • _context ссылается на текущий контекст и содержит все переменные, переданные в шаблон, такие как переменные, отправленные из theme(), подготовленные препроцессом или установленные в шаблоне. Добавление {{dump ()}} без указания переменной эквивалентно {{dump (_context)}}.
  • _charset ссылается на текущий набор символов.

 

Остерегайтесь dump()

Если вы хотите увидеть все переменные, но dump() приводит к исчерпанию памяти из-за рекурсии или тому подобного, вы можете просмотреть _context, чтобы увидеть все ключи в нем:

<ol>
  {% for key, value in _context  %}
    <li>{{ key }}</li>
  {% endfor %}
</ol>

Затем используйте условную проверку (например, {% if loop.index == 2%}) и выведите это значение только при необходимости.

Больше информации

См. Документацию по функции dump Twig, чтобы узнать больше о функции dump.

Отладка с помощью xdebug

Наиболее часто рекомендуемый способ отладки - использовать IDE с плагином xdebug.

Самая простая конфигурация для настройки - использовать PHPstorm (коммерческий) и xdebug. Microsoft VSCode - это бесплатная IDE с открытым исходным кодом, с плагинами, которые будут делать то же самое, но не требуют от вас покупки коммерческого программного обеспечения.

Использование xdebug позволит вам пройти через процесс, просмотреть содержимое переменной и сделать это таким образом, чтобы устранить загадки под крышками, а также предотвратить бесконечные циклы, которые могут возникнуть при использовании dump или kint.

Небольшой полезный модуль под названием twig_xdebug может помочь в отображении доступных переменных в xdebug.

Отладка с помощью kint

Функция dump() в Twig часто печатает много текста на веб-странице, что затрудняет поиск нужной иглы среди стога сена.

Альтернативой dump() является kint, инструмент отладки PHP. Функция kint() работает точно так же, как и функция dump() выше, но предоставляет расширяемый/разборный интерфейс для переменных, которые она выводит.

Проект devel предоставляет модуль devel kint, который позволяет разработчикам использовать kint() вместо dump().

1. Загрузите модуль devel.
2. Установите модуль «devel kint».
3. Как и функция dump, kint() не будет отображать вывод, если не включена отладка. Узнайте, как включить отладку Twig.
4. В ваших файлах .twig используйте kint() для проверки переменных, как описано в dump().
5. При необходимости загрузите и установите Search Kint module для поиска в списке вложенных переменных.

Метод и класс whitelist policy

При работе с объектами мы помещаем в белый список вызов определенного набора методов получения и установки или объектов через класс TwigSandboxPolicy. Это сделано для предотвращения вызова случайных методов в ваших шаблонах. Например: {{node.delete}} на объекте узла может удалить узел, если белый список не был на месте. Вы можете расширить этот белый список, добавив в ваш файл settings.php следующее

$settings['twig_sandbox_whitelisted_methods'] = [
  'id',
  'label',
  'bundle',
  'get',
  '__toString',
  'toString',
  'referencedEntities',
];

Где 'referencedEntities' - это метод, который вы хотели бы использовать в своем шаблоне.