Como criar rotas personalizadas no Magento 2

Contextualizando

O que é uma rota?

Uma rota está diretamente relacionada a URL funcionando como um localizador de um recurso, acrescentando um path (caminho) na URL, que ao ser chamado, retornará uma página gerada dinamicamente conforme o caminha da URL.

Código para criar uma rota personalizada

O arquivo routes.xml contém informações sobre todas as rotas e frontNames registrados. O atributo frontName é a primeira parte de uma rota da URL.
Deve-se registrar um arquivo routes.xml e associá-lo a um módulo. É possível ter vários módulos associados a uma rota.
Para criar uma rota relacionada ao painel administrativo utiliza-se a estrutura de pastas \{Vendor}\{Module}\etc\adminhtml\routes.xml e o valor admin para o atributo id do nó <router>, já para criar rotas na parte visual da loja do site utiliza-se a estrutura de pastas \{Vendor}\{Module}\etc\frontend\routes.xml e o valor standard para o atributo id do nó <router>.

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
    <router id="{router_id}">
        <route id="{route_id}" frontName="{frontName}">
            <module name="{Vendor}_{Module}" />
        </route>
    </router>
</config>

O atributo id do nó <route> é uma string única que identificará a rota. Esta string é utilizada para declarar a primeira parte do nome do arquivo de layout da página.
O atributo frontName é uma string única que identificará a primeira parte do caminho da URL.

Finalizando

Valores entre chaves ({test}) devem ser alterados na implementação do código.

Habilitando as alterações

Execute o comando PHP para limpar todos os caches de armazenamento em cache do processos.

php bin/magento cache:clean
php bin/magento flush

Diretórios e Arquivos

Segue a a lista de diretórios e arquivos que devem ser criados.

- app/
  - code/
    - {Vendor}/
        - {Module}/
          - etc/
            - {area}/
              - routes.xml
            - module.xml
          - registration.php
          - composer.json

35