Trabalhando com Controller no Magento 2, como criar um controller para acesso externo “publico”.

O que é um Controller?
Um controlador (controller) envia comandos para o modelo para atualizar o seu estado (por exemplo, editando um documento). O controlador também pode enviar comandos para a visão associada para alterar a apresentação da visão do modelo (por exemplo, percorrendo um documento).
Controller faz parte do Model-view-controller (MVC), em português modelo-visão-controlador, é um padrão de arquitetura de software utilizado no desenvolvimento de diversas aplicações.
Como o Controller funciona no Magento 2?
Os controladores no Magento 2, como em outras estruturas MVC do PHP, são parte importante do fluxo de Mvc.
No Magento 2 há muitas mudanças nos controladores, por exemplo; como eles estão estruturados e como eles funcionam em comparação com o Magento 1.
Se você está familiarizado com os controladores Magento 1, então você sabe que eles podem ter várias ações (métodos de classe). No Magento 2 controladores têm apenas um método (executar) que será chamado pelo controlador frontal.
Estrutura da URL
Temos um simples exemplo, aonde o usuário irá fazer uma requisição via web browser a uma URL:
http://rogertakemiya.com.br/route_name/controller/action
Aonde a URL do controller é composta pelos seguintes elementos:
- route_name, sendo um nome unico definido no arquivo routes.xml.
- controller é o diretório que está localizado no diretório principal, Controller na pasta do módulo.
- action é a classe com o método que irá executar a requisição.
Criando o Controller
Neste tutorial, para criar o controller iremos utilizar como base o exemplo de módulo que foi criado neste post: Como criar um Módulo no Magento 2
Primeiro, criamos o arquivo routes.xml
Obedecendo a seguinte estrutura de diretório e arquivo: etc/frontend/routes.xml
Conteúdo:
<?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="standard">
<route frontName="test" id="test">
<module name="Rogertakemiya_Test"/>
</route>
</router>
</config>
Segundo, criamos o controller
Diretório: Controller/Index/Index.php
Conteúdo:
<?php
namespace Rogertakemiya\Test\Controller\Index;
class Index extends \Magento\Framework\App\Action\Action {
protected $resultPageFactory;
/**
* Constructor
*
* @param \Magento\Framework\App\Action\Context $context
* @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
*/
public function __construct(
\Magento\Framework\App\Action\Context $context,
\Magento\Framework\View\Result\PageFactory $resultPageFactory
)
{
$this->resultPageFactory = $resultPageFactory;
parent::__construct($context);
}
/**
* Execute view action
*
* @return \Magento\Framework\Controller\ResultInterface
*/
public function execute()
{
return $this->resultPageFactory->create();
}
}
Terceiro, criamos o arquivo XML com as diretrizes do Layout
Diretório: view/frontend/layout/helloworld_index_index.xml
Conteúdo:
<?xml version="1.0" ?>
<page layout="1column" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceContainer name="content">
<block class="Rogertakemiya\Test\Block\Index\Index" name="index.index" template="Rogertakemiya_Test::index/index.phtml"/>
</referenceContainer>
</body>
</page>
Quarto, o template
Diretório: view/frontend/templates/index/index.phtml
Conteúdo:
<?php echo "Hello"; ?>
Testando o Controller no Magento 2
Antes de testar você deverá limpar o cache da loja.
Feito isso, acesse:
http://<yourhost.com>/helloworld/index/index
Você deverá visualizar a mensagem “Hello”.
Caso ocorra o erro 404, verifique se os passos desse tutorial foram seguidos corretamente e certifique-se que o cache da loja foi esvaziado.