
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.
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.
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:
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
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> 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();
}
} 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> Diretório: view/frontend/templates/index/index.phtml
Conteúdo:
<?php echo "Hello"; ?>
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.
Pedido que não fatura e e-mail que não sai porque todo job fica missed: como ler a cron_schedule, conferir o…
Uma função curta em PHP 8.3 que transforma Camiseta Preta Tamanho GG em camiseta-preta-tamanho-gg, sem depender do locale do servidor.
O banner registra o clique só no navegador e some. Veja a tabela MySQL e o endpoint que gravam a…
A classe do comando existe e o bin/magento list ignora ela. Falta o registro no di.xml: aqui vai a classe…
Como traduzir duas mil linhas do pt_BR.csv do Magento 2 lendo com fgetcsv e regravando com fputcsv, sem encostar na…
Produto variável respondendo "Desculpe, este produto não está disponível" mesmo com a variação ativa: limpe os transients do WooCommerce e…