Jak mogę debugować przetwarzanie plików układu w Magento 2?

14

Zgodnie ze specyfikacją motywu magento 2 dotyczącą przetwarzania plików układu:

Aplikacja Magento przetwarza pliki układów w następującej kolejności:

1 / Zbiera wszystkie pliki układu z modułów. Kolejność zależy od kolejności modułów na liście modułów z aplikacji / etc / config.php.

2. / Określa sekwencję dziedziczonych motywów [, ...,]

3. / Iteruje sekwencję tematów od ostatniego przodka do bieżącego:

za. Dodaje wszystkie rozszerzające się pliki układu motywu do listy.

b. Zastępuje zastąpione pliki układu na liście.

4. / Scala wszystkie pliki układu z listy.

Jak mogę debugować i wyświetlać plik układu na każdym etapie tego procesu?

Thienphucvx
źródło
Masz na myśli gdzie umieścić punkty przerwania? A czego byś się spodziewał?
BuskaMuza,
Cześć Dziękuję Ci. Moim głównym celem jest wydrukowanie „scala cały plik układu”, aby zobaczyć, jak renderuje się układ Magento 2. Dodałem swoją odpowiedź jak poniżej.
thienphucvx,
@ thienphucvx, użyłem twojego kodu, ale nie mogę utworzyć .xml w var / log. Czy muszę coś zmienić?
uczeń
Czy możesz spróbować debugować, aby upewnić się, że poprawnie utworzyłeś ten moduł, np. „Var_dump something on excute method of obserwuje”, aby sprawdzić, czy działa, czy nie?
thienphucvx
1
Zajrzyj do tej aplikacji dla programistów, która może ci pomóc w procesie debugowania: github.com/magespecialist/mage-chrome-toolbar
Phoenix128_RiccardoT

Odpowiedzi:

16

Wreszcie mogę wydrukować cały załadowany układ XML i wiedzieć, jak działa układ Magento 2. Pomaga nam również sprawdzić, czy nasz niestandardowy układ modułu jest załadowany, czy nie. Chodzi o to:

  • Słuchamy zdarzenia „ layout_generate_blocks_after ” i od tego momentu uzyskujemy całe załadowane drzewo.

  • Zapisz wszystkie załadowane drzewo w pliku xml.

1 / Tworzymy nowy katalog Sample/Dev. Utwórz, Sample/Dev/registration.phpaby zadeklarować za pomocą Magento 2 o naszym katalogu modułów.

<?php

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

2 / Utwórz Sample/Dev/etc/module.xml: Aby poinformować Magento 2 o wersji instalacyjnej naszego modułu

<?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 / Utwórz Sample/Dev/etc/frontend/events.xml. W tym pliku odsłuchamy wydarzenie „układ_generacji_bloków po”

<?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 / Utwórz Sample/Dev/Model/Layout.phpz treścią jak poniżej

<?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 / Skonfiguruj nowy moduł. W katalogu domowej witryny. wprowadź wiersz poleceń CMD:

- moduł php bin / magento: włącz Sample_Dev

- Konfiguracja php bin / magento: aktualizacja

6 / Odśwież stronę, na której chcesz zobaczyć plik xml (na przykład: twoją stronę główną) i sprawdź w pliku XML uchwyt var/log/layout_block.xml.

Thienphucvx
źródło
Właśnie się z tym spotkałem i jest niesamowity. Czy mógłbyś przesłać PR do Magento 2, aby każdy mógł mieć tę funkcję? Nawet wydanie modułu pomogłoby ogromnie.
mbalparda
Cześć Mbalparda, nie wiem jak to zrobić. Czy mógłbyś mi pomóc to przesłać?
thienphucvx
Tak, pingowałem cię na Twitterze.
mbalparda
1
gdzie jest problem / prośba o upvoting? link?
Bernhard Zürn