Criando um menu no admin, com ACL e Controller no Magento 2
Desenvolvimento, Magento 2
Atualizado em 22 de janeiro de 2023
Como já vimos anteriormente, os controllers são classes responsáveis por tratar uma requisição. Neste artigo veremos como criar um controller na área administrativa da nossa loja Magento 2, e também como definir permissões de quem pode acessá-lo (ACL). Além disso, ainda vamos adicionar um item no menu do nosso admin para acessar esta nova página.
Este é um artigo bônus da série sobre controllers no Magento 2 aqui do Magenteiro.
No primeiro artigo da série vimos como criar um controller frontend no Magento 2. Em seguida vimos como aplicar um Layout XML ao nosso controller.
Criar um controller no backend tem algumas diferenças em relação ao controller no frontend. Ao decorrer do artigo você perceberá.
Neste tutorial nós vamos ver:
- Como criar um item no menu do admin do Magento 2
- Como criar a classe do nosso controller
- Como definir o arquivo de rotas do admin (routes.xml)
- Definindo o ACL (Quem pode acessar esta área no admin)
- Testar nosso link no admin
Premissa: Partirei do princípio que você já criou a estrutura básica de um módulo de Magento 2. Neste exemplo nosso módulo se chamará Magenteiro_Admin
.
1. Criando um item no menu do admin
Vamos criar um item de menu principal chamado Magenteiro Menu e dentro dele um Item Menu que irá redirecionar para uma o meu Index.php
.
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Backend:etc/menu.xsd"> <menu> <add id="Magenteiro_Admin::menu" title="Magenteiro Menu" module="Magenteiro_Admin" resource="Magenteiro_Admin::menu" sortOrder="10"/> <add id="Magenteiro_Admin::item" title="Item Menu" module="Magenteiro_Admin" resource="Magenteiro_Admin::item" parent="Magenteiro_Admin::menu" action="magenteiroadmin/item"/> </menu> </config>
A esta altura, se limparmos o cache da loja, já podemos ver nosso menu por lá.
2. Criando a classe do nosso Controller
Como vimos no primeiro artigo da série, cada action tem um controller específico com um método execute(). No admin não é diferente, com algumas pequenas diferenças na classe.
<?php namespace Magenteiro\Admin\Controller\Adminhtml\Item; class Index extends \Magento\Backend\App\Action { /** * @var \Magento\Framework\View\Result\PageFactory */ protected $resultPageFactory; public function __construct( \Magento\Backend\App\Action\Context $context, \Magento\Framework\View\Result\PageFactory $resultPageFactory) { parent::__construct($context); $this->resultPageFactory = $resultPageFactory; } /** * @return \Magento\Framework\App\ResponseInterface|\Magento\Framework\Controller\ResultInterface|void */ public function execute() { return $resultPage = $this->resultPageFactory->create(); } protected function _isAllowed() { return $this->_authorization->isAllowed('Magenteiro_Admin::item'); } }
3. Definindo o arquivo de rotas (routes.xml)
Nosso arquivo de rotas também tem algumas diferenças do arquivo de rotas do front end. Note que o router id agora é “admin” e o nosso route id
e frontName
possuem o mesmo nome.
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd"> <router id="admin"> <route id="magenteiroadmin" frontName="magenteiroadmin"> <module name="Magenteiro_Admin"/> </route> </router> </config>
4. Definindo o ACL
Note que no passo 2, nós criamos um método chamado _isAllowed
, responsável por checar se a pessoa que está acessando nosso controller está autorizada a ver esta página.
Agora temos que declarar isso no arquivo acl.xml
para que esta opção apareça no gerenciamento de acesso administrativo do Magento.
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Acl/etc/acl.xsd"> <acl> <resources> <resource id="Magento_Backend::admin"> <resource id="Magenteiro_Admin::menu" sortOrder="10" disabled="false" title="Magenteiro Menu"> <resource id="Magenteiro_Admin::item" sortOrder="20" disabled="false" title="Menu Item"/> </resource> </resource> </resources> </acl> </config>
Lembre-se de adicionar Magento_Backend::admin
no começo da hierarquia.
Se editarmos um dos grupos de acesso em System > Permission > User Roles, veremos:
5. Testando tudo
Após limpar caches e ativar o módulo (caso não tenha feito isso ainda), só precisamos testar.
Se não estiver trabalhando no modo desenvolvedor, provavelmente precisará atualizar as injeções de dependências com o comando bin/magento setup:upgrade
.
Conclusão
Se você trabalhou com Magento 1, pôde ver que ficou até mais fácil criar um item no menu e uma página no admin do Magento, não é mesmo?
Apesar de termos criado um item novo no menu, você pode criar apenas um submenu em um dos contextos já existentes. Basta usá-lo como parent
no passo 1 ao invés do Magenteiro_Admin::menu
e não adicionar o primeiro item (sem parent).
Se quiser ver esta e muitas outras explicações com mais detalhes, e fazer parte de um grupo de pessoas famintas por aprender Magento 2, junte-se à nós no Curso de desenvolvimento para Magento 2.
Não deu certo pra você? Perdeu alguma coisa no caminho?
Às vezes não conseguimos ver onde erramos. Se quiser, coloque seu e-mail abaixo e receba o módulo que acabamos de criar aqui.
- PagSeguro (PagBank) para Magento 1 recebe a Nova Geração - 9 de abril de 2024
- Recorrência no WooCommerce Sem Plugins Pagos - 28 de janeiro de 2024
- Chargeback. O que é, e como se livrar deles. - 19 de dezembro de 2023
Deixe seu comentário
[fbcomments url="https://www.magenteiro.com/blog/magento-2/menu-admin-e-controller-no-magento-2/"]