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.