Como depurar o processamento de arquivos de layout no Magento 2?

14

De acordo com a especificação do tema magento 2 sobre o processamento de arquivos de layout:

O aplicativo Magento processa os arquivos de layout na seguinte ordem:

1 / Coleta todos os arquivos de layout dos módulos. A ordem é determinada pela ordem dos módulos na lista de módulos em app / etc / config.php.

2. / Determina a sequência dos temas herdados [, ...,]

3. / Repete a sequência de temas do último ancestral para o atual:

uma. Adiciona todos os arquivos de layout de tema estendidos à lista.

b. Substitui os arquivos de layout substituídos na lista.

4. / Mescla todos os arquivos de layout da lista.

Como posso depurar e visualizar o arquivo de layout para todas as etapas deste processo?

thienphucvx
fonte
Você quer dizer onde colocar pontos de interrupção? Ou o que você esperaria?
precisa saber é o seguinte
Oi obrigado. Meu principal objetivo é imprimir "mescla todos os arquivos de layout" para ver como o layout do magento 2 é renderizado. Eu adicionei minha resposta como abaixo.
Thienphucvx
@ thienphucvx, usei seu código, mas não consigo criar .xml em var / log. Preciso mudar alguma coisa?
aluno
Você poderia tentar depurar para ter certeza de que criou esse módulo corretamente como "var_dump algo no método de observação preciso" para verificar se está funcionando ou não?
thienphucvx
1
Ter um olhar para este aplicativo desenvolvedor, pode ajudá-lo no processo de depuração: github.com/magespecialist/mage-chrome-toolbar
Phoenix128_RiccardoT

Respostas:

15

Finalmente, eu posso imprimir todo o layout xml carregado e saber como o layout do magento 2 está funcionando. Também nos ajuda a verificar se nosso layout de módulo personalizado está carregado ou não. A ideia é:

  • Ouvimos um evento " layout_generate_blocks_after " e obtemos toda a árvore carregada a partir desse ponto.

  • Salve toda a árvore carregada em um arquivo xml.

1 / Criamos um novo diretório Sample/Dev. Crie Sample/Dev/registration.phppara declarar com Magento 2 sobre o diretório de nosso módulo.

<?php

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

2 / Create Sample/Dev/etc/module.xml: Para informar ao Magento 2 sobre a versão de instalação do nosso módulo

<?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 / Criar Sample/Dev/etc/frontend/events.xml. Neste arquivo, ouviremos o evento "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 / Crie Sample/Dev/Model/Layout.phpcom o conteúdo abaixo

<?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 / Configurar novo módulo. No diretório do site inicial. digite a linha de comando do CMD:

- php bin / magento module: habilite Sample_Dev

- configuração do php bin / magento: upgrade

6 / Atualize a página em que deseja ver o arquivo xml (por exemplo: sua página inicial) e faça o check-in do arquivo xml do identificador var/log/layout_block.xml.

thienphucvx
fonte
Acabei de me deparar com isso e é incrível. Você se importaria de enviar um PR para o Magento 2 para que todos possam ter esse recurso? Até o lançamento de um módulo ajudaria tremendamente.
precisa saber é o seguinte
Olá Mbalparda, não sei como fazê-lo. Você poderia me ajudar a enviá-lo?
Thienphucvx
Sim pingou você no Twitter.
precisa saber é o seguinte
1
onde está o problema / solicitação de solicitação de votação? ligação ?
Bernhard Zürn