Como criar um Controller no Magento 2

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

Trabalhando com Controller no Magento 2

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.

Dúvidas? Faça um comentário logo abaixo ou envie uma mensagem clicando aqui.

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *