Bagaimana saya bisa men-debug pemrosesan file tata letak di Magento 2?


14

Menurut spesifikasi tema magento 2 tentang pemrosesan file Layout:

Aplikasi Magento memproses file tata letak dalam urutan berikut:

1 / Mengumpulkan semua file tata letak dari modul. Urutan ditentukan oleh urutan modul dalam daftar modul dari app / etc / config.php.

2. / Menentukan urutan tema bawaan [, ...,]

3. / Iterasikan urutan tema dari leluhur terakhir ke saat ini:

Sebuah. Menambahkan semua file tata letak tema yang diperluas ke daftar.

b. Mengganti file tata letak yang ditimpa dalam daftar.

4. / Gabungkan semua file tata letak dari daftar.

Bagaimana saya bisa men-debug dan melihat file tata letak untuk setiap langkah dari proses ini?


Maksud Anda di mana harus meletakkan break point? Atau apa yang Anda harapkan?
— BuskaMuza

Hai, terima kasih. Tujuan utama saya adalah mencetak "menggabungkan semua file layout" untuk melihat bagaimana tata letak magento 2 merender. Saya telah menambahkan jawaban saya seperti di bawah ini.
— thienphucvx

@ thienphucvx, saya menggunakan kode Anda tetapi saya tidak dapat membuat .xml di var / log. Apakah saya perlu mengubah apa pun?
— pelajar

Bisakah Anda mencoba debug untuk memastikan bahwa Anda membuat modul itu dengan benar seperti "var_dump sesuatu pada metode pengamat excute" untuk memeriksa apakah itu berfungsi atau tidak?
— thienphucvx

1
Lihat aplikasi pengembang ini, ini dapat membantu Anda dalam proses debug: github.com/magespecialist/mage-chrome-toolbar
— Phoenix128_RiccardoT

Jawaban:


15

Akhirnya, saya bisa mencetak semua tata letak xml yang dimuat dan tahu bagaimana tata letak magento 2 bekerja. Ini juga membantu kita memeriksa apakah tata letak modul khusus kita dimuat atau tidak. Idenya adalah:

  • Kami mendengarkan acara " layout_generate_blocks_after " dan mendapatkan semua pohon yang dimuat dari titik itu.

  • Simpan semua pohon yang dimuat ke file xml.

1 / Kami membuat direktori baru Sample/Dev. Buat Sample/Dev/registration.phpuntuk menyatakan dengan Magento 2 tentang direktori modul kami.

<?php

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

2 / Buat Sample/Dev/etc/module.xml: Untuk memberi tahu Magento 2 tentang versi pengaturan modul kami

<?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 / Buat Sample/Dev/etc/frontend/events.xml. Dalam file ini, kita akan mendengarkan acara "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 / Buat Sample/Dev/Model/Layout.phpdengan konten seperti di bawah ini

<?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 / Siapkan modul baru. Di direktori situs web rumah Anda. masukkan baris perintah CMD:

- modul php bin / magento: aktifkan Sample_Dev

- setup php bin / magento: peningkatan

6 / Refresh halaman yang ingin Anda lihat file xml (misalnya: halaman rumah Anda) dan periksa file handle xml Anda var/log/layout_block.xml.


Saya baru saja menemukan ini dan itu luar biasa. Maukah Anda mengirimkan PR ke Magento 2 agar semua orang dapat memiliki fitur ini? Bahkan melepaskan modul akan sangat membantu.
— mbalparda

Hai Mbalparda, saya tidak tahu bagaimana melakukannya. Bisakah Anda membantu saya mengirimkannya?
— thienphucvx

Yap melakukan ping Anda di Twitter.
— mbalparda

1
di mana masalah / tarik-permintaan untuk upvoting? tautan ?
— Bernhard Zürn
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.