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?


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.