В новой ветке нашей любимой CMF режим отладки несколько изменился. Если в 7ке нам достаточно было отключить кеширование из админ панели и можно было дальше смело дебажить все наши наработки, то теперь от кеширования так «просто» не избавиться. Этим мы сейчас с вами и займемся.
Отключаем кеширование
Итак, у нас есть чистая установка Drupal 8, со стандартной темой Bartik активированной по умолчанию. Первое, что нам необходимо сделать – это убедиться, что кеширование в админке сайта у нас отключено. Идем по пути Конфигурация -> Производительность:
И в пункте «Кеширование» выбираем «Не кешировать».
Далее приступаем к более интересному моменту, а именно к файлам конфигурации. Нам нужно скопировать файл
example.settings.local.php
который, находится в корне папки /sites на вашем сервере, в корень папки /sites/default и переименовать его в
settings.local.php
Данный файл определяет параметры при разработке вашего сайта. В данном файле ищем запись вида:
# $settings['cache']['bins']['render'] = 'cache.backend.null';
Которую, собственно нам нужно разкомментировать (удалить решетку # в начале записи).
Теперь открываем файл
settings.php
и ищем запись вида
# if (file_exists(__DIR__ . '/settings.local.php')) { # include __DIR__ . '/settings.local.php'; # }
Которую также нужно разкоментировать. Данная запись говорит о том, что если существует файл settings.local.php, то подключить его.
Хочу заменить, если после указанных манипуляций вы получаете сообщение о непредвиденной ошибке, то запустите файл rebuild.php, он перестроит ваши параметры сайта.
Включаем отладку шаблонизатора Twig
Открываем файл
development.services.yml
который, находится в корне папки /sites и дописываем следующую запись:
parameters: twig.config: debug: true auto_reload: true cache: false
Список дополнительных параметров вы можете найти в файле default.services.yml, который находится в корне /sites/default
После чего чистим кеш сайта и наблюдаем результат:
Отладка переменных внутри шаблонов Twig
Для отладки переменных внутри Twig шаблонов, можно использовать
{{ dump(variable) }}
Например {{ dump(page) }} - для отладки внутри page.htm.twig или с использованием Devel, который приобрел PHP отладчик – Kint.
{{ kint(page) }}
Более подробно о Kint вы можете прочитать здесь.
Комментарии (6)
Здравствуйте!
Столкнулся с такой проблемой:
Поднял drupal 8 локально, на windows, веб сервер laragon,
но так-же поднимал на сервере хостинга, проблема такая-же, по этому не думаю что дело в "железе".
(но на всякий случай конфигурация: amd FX 6200 4300mgz, 8 gb оперативной, ssd диск.)
Когда включаю отладку twig и устанавливаю "cache: false", сайт и локально и на хостинге "ложится".
Ошибка "PHP: Fatal Error: Allowed Memory Size".
На локальной машине, в настройках php указал memory_limit - 4 гигабайта.
Но это не помогло, ошибка не выдается но и сайт не грузится, т.е. просто белое окно и бесконечная загрузка, при этом потребление памяти у сервера в этот момент резко летит вверх и пока сервер не перезагрузишь сайт висит.
Если же "cache: true" сайт грузится но понятное дело, для разработки это не подойдет, не очень весело каждый раз кликать очищать кэш при внесении изменений.
Есть ли какой-то способ заставить drupal 8 нормально работать в режиме разработки?
И еще похожий вопрос когда использую kint в ноде ( допустим в списке статей ).
В twig шаблоне или в хуке ноды выводишь содержимое " kint($variables); "
Если статья одна на странице то все нормально, но если статей хотя-бы 3 то все начинает либо дико тормозить, либо опять-же перестает грузиться страница.
Временно это решается уменьшением глубины отображения в конфигах kint, но опять-же как заставить его нармально работать? Неужели там НАСТОЛЬКО много данных тянется что даже браузер виснет?
Много текста получилось, но пока все это не позволяет использовать drupal 8, а хочется...
Можете что-либо подсказать по этой теме?
После внесений изменений отладки - запустите rebuild.php.
Kint - это его свойство, он действительно очень много всего тянет, но в этом есть и огромный плюс, сразу понятно откуда, что приходит.
Как вывести доп. поле телефон в кастомном блоке в шаблоне блока именно в шаблоне блока, не ноды и т.п. block.html.twig
{{ content.field_telefon }}
Никакой из вариантов не работает.
так поле у ноды было создано ? или у блока ?
У блока
Кстати уже сам решил вопрос:
{{ content['#block_content'].field_telefon.value }}
Кстати другая проблема, почему то Drupal 8 жутко тормозит на хосте, при этом drupal 7 Летает.
PHP 7 стоит, друпал не ругается, что есть проблемы.
Очень не комфортно и долго работать с тормозами такими, когда страница грузится по несколько секунд. Можете какие то догадки пожалуйста написать, я попробую проверить у себя. А то подобной проблемы в инете не нахожу(
network браузера и дебагер devel - смотрите логи и найдете причину думаю. Так сложно сказать