Há dois arquivos que são obrigatórios para inicializar um módulo: registration.php, module.xml.
A arquitetura de um módulo em Magento 2 mantém os arquivos do módulo num diretório único.
app/code/CompanyName/ModuleName vendor/vendor-name/module-name
Neste minicurso trabalharemos com a estrutura: app/code/CompanyName/ModuleName
Desenvolvendo um Módulo para Magento 2
Abra o seu projeto Magento 2, na raiz do projeto, no diretório app/code, crie a seguinte estrutura: AbraaoMarques/NewsletterModal, conforme abaixo:
Observação: Se você fez uma instalação recente do Magento 2, provavelmente não terá os diretórios app/code já disponíveis. Então, basta criá-los pra dar continuidade a este minicurso.
2º Observação: Estarei usando o meu nome como vendor do módulo. Caso queira, poderá criar com o seu nome ou com o nome da sua empresa. Mas tenha cuidado ao criar os arquivos para não quebrar o funcionamento do seu módulo.
Inicializando um Módulo
Crie o arquivo registration.php e o etc/module.xml:
Adicione o script abaixo em registration.php:
<?php \Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::MODULE, 'AbraaoMarques_NewsletterModal', __DIR__ );
E o script em etc/module.xml:
<?xml version="1.0"?> <!-- /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <module name="AbraaoMarques_NewsletterModal" setup_version="0.0.1"> </module> </config>
Feito isso, execute o comando:
php bin/magento setup:upgrade
Pronto! Acabamos de registrar o nosso primeiro módulo no Magento 2!!!
Você poderá conferir o módulo instalado pelo app/etc/config.php e pelo banco:
Explicando o Funcionamento do registration.php e etc/module.xml:
registration.php
Ele é incluído pelo Composer autoloader:
app/etc/NonComposerComponentRegistration.php
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ $pathList[] = dirname(__DIR__) . '/code/*/*/cli_commands.php'; $pathList[] = dirname(__DIR__) . '/code/*/*/registration.php'; $pathList[] = dirname(__DIR__) . '/design/*/*/*/registration.php'; $pathList[] = dirname(__DIR__) . '/i18n/*/*/registration.php'; $pathList[] = dirname(dirname(__DIR__)) . '/lib/internal/*/*/registration.php'; $pathList[] = dirname(dirname(__DIR__)) . '/lib/internal/*/*/*/registration.php'; foreach ($pathList as $path) { // Sorting is disabled intentionally for performance improvement $files = glob($path, GLOB_NOSORT); if ($files === false) { throw new \RuntimeException('glob() returned error while searching in \'' . $path . '\''); } foreach ($files as $file) { include $file; } }
Isso adiciona o nosso módulo a uma lista de módulos, componentes, estáticos.
vendor/magento/framework/Component/ComponentRegistrar.php
Após isso, o Magento 2 buscará pelo etc/module.xml do nosso módulo.
O etc/module.xml especifica a versão de configuração e a sequência de carregamento do módulo.
A sequência informa ao Magento em que ordem o módulo deverá ser carregado.
vendor/magento/framework/Module/ModuleList/Loader.php
Este ajuste ocorre apenas quando o módulo está instalado.
Você pode confegir a lista dos módulos instalados em:
app/etc/config.php
E aí? Gostou do artigo? Que tal nos ajudar a divulgá-lo?! Compartilhe o link desse artigo com todos os devs que querem aprender a trabalhar com Magento 2!
Dúvidas? Posta aí!!!
Aquele abraço!
Muito bom! Bem explicado! Meus parabéns!
Valeu 😀
Sucesso aí!!!