Как я могу отладить обработку файла макета в Magento 2?

14

Согласно спецификации темы magento 2 об обработке файлов макетов:

Приложение Magento обрабатывает файлы макетов в следующем порядке:

1 / Собирает все файлы макетов из модулей. Порядок определяется порядком модулей в списке модулей из приложения / etc / config.php.

2. / Определяет последовательность унаследованных тем [, ...,]

3. / Перебирает последовательность тем от последнего предка до текущего:

а. Добавляет все расширяющие файлы макета темы в список.

б. Заменяет переопределенные файлы макета в списке.

4. / Объединяет все файлы макетов из списка.

Как я могу отладить и просмотреть файл макета для каждого шага этого процесса?

thienphucvx
источник
Вы имеете в виду, где поставить точки останова? Или что вы ожидаете?
BuskaMuza
Привет спасибо. Моя основная цель - печать «объединяет все файлы макета», чтобы увидеть, как макет magento 2 рендерится. Я добавил свой ответ как ниже.
thienphucvx
@ thienphucvx, я использовал твой код, но не могу создать .xml в var / log. Нужно ли что-то менять?
ученик
Не могли бы вы попытаться выполнить отладку, чтобы убедиться, что вы правильно создали этот модуль, например, «var_dump что-то на изящном методе наблюдателя», чтобы проверить, работает он или нет?
thienphucvx
1
Посмотрите это приложение для разработчиков, оно может помочь вам в процессе отладки: github.com/magespecialist/mage-chrome-toolbar
Phoenix128_RiccardoT

Ответы:

15

Наконец, я могу распечатать все загруженные макеты XML и узнать, как работает макет magento 2. Это также помогает нам проверить, загружен ли наш пользовательский макет модуля или нет. Идея заключается в следующем:

  • Мы слушаем событие « layout_generate_blocks_after » и получаем все загруженное дерево с этой точки.

  • Сохраните все загруженное дерево в XML-файл.

1 / Создаем новый каталог Sample/Dev. Создайте, Sample/Dev/registration.phpчтобы объявить с Magento 2 о нашем каталоге модулей.

<?php

\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Sample_Dev',
    __DIR__
);

2 / Создать Sample/Dev/etc/module.xml: сообщить Magento 2 о настройке версии нашего модуля.

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="module.xsd">
    <module name="Sample_Dev" setup_version="1.0.0" schema_version="1.0.0" release_version="1.0.1">
    </module>
</config>

3 / Создать Sample/Dev/etc/frontend/events.xml. В этом файле мы будем слушать событие «layout_generate_blocks_after»

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">

    <event name="layout_generate_blocks_after">
        <observer name="thienphucvx_layout_generate_blocks_after" instance="Sample\Dev\Model\Layout" />
    </event>

</config>

4 / Создать Sample/Dev/Model/Layout.phpс содержанием, как показано ниже

<?php

namespace Sample\Dev\Model;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
class Layout  implements ObserverInterface
{
    protected $_logger;
    public function __construct ( \Psr\Log\LoggerInterface $logger
    ) {
        $this->_logger = $logger;
    }

    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        $xml = $observer->getEvent()->getLayout()->getXmlString();
        /*$this->_logger->debug($xml);*//*If you use it, check ouput string xml in var/debug.log*/
        $writer = new \Zend\Log\Writer\Stream(BP . '/var/log/layout_block.xml');
        $logger = new \Zend\Log\Logger();
        $logger->addWriter($writer);
        $logger->info($xml);
        return $this;
    }
}

5 / Установить новый модуль. В вашем домашнем каталоге сайта. введите командную строку CMD:

- модуль php bin / magento: включить Sample_Dev

- php bin / magento setup: обновить

6 / Обновите страницу, на которой вы хотите увидеть XML-файл (например, свою домашнюю страницу), и проверьте свой дескриптор XML-файла var/log/layout_block.xml.

thienphucvx
источник
Я только сталкивался с этим, и это удивительно. Не могли бы вы представить PR в Magento 2, чтобы каждый мог иметь эту функцию? Даже выпуск модуля очень помог бы.
mbalparda
Привет Мбалпарда, я не знаю, как это сделать. Не могли бы вы помочь мне представить его?
thienphucvx
Да пинговал тебя в твиттере.
mbalparda
1
где проблема / тяга-запрос для голосования? ссылка на сайт ?
Бернхард Цюрн