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?

thienphucvx
sumber
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.

thienphucvx
sumber
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