Cursos Magento

Criando um menu no admin, com ACL e Controller no 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:

  1. Como criar um item no menu do admin do Magento 2
  2. Como criar a classe do nosso controller
  3. Como definir o arquivo de rotas do admin (routes.xml)
  4. Definindo o ACL (Quem pode acessar esta área no admin)
  5. 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á.

Menu admin Magento 2

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:

Editando regra ACL no Magento 25. 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.

Magento Admin Page

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.

Últimos posts por Ricardo Martins (exibir todos)
Comentários

Deixe seu comentário

[fbcomments url="https://www.magenteiro.com/blog/magento-2/menu-admin-e-controller-no-magento-2/"]