No último artigo, vimos como usar o Response Type Raw para retorna uma string através de um Controller. Dando continuidade aos nossos estudos de Response Type, hoje veremos Magento 2 Controller Redirect.
Magento 2 Controller Redirect
O Redirect é uma maneira de usarmos uma Rota A para redirecionar o usuário para a Rota B.
Voltando ao nosso módulo, criamos um novo Controller:
<?php namespace ForMage\Learning\Controller\Page; class NewRoute extends \Magento\Framework\App\Action\Action { public function execute() { echo "MY NEW ROUTE"; } }
Ao acessar a nossa rota newroute, temos o resultado:
MY NEW ROUTE
Bom, o que teremos agora é modificar a rota em que já estávamos trabalhando nela, para que ao acessá-la, a mesma nos redireciona para esta nova rota.
Então, abrindo este Controller temos a seguinte modificação:
<?php namespace ForMage\Learning\Controller\Page; use Magento\Framework\App\Action\Context; use Magento\Framework\View\Result\PageFactory; use Magento\Framework\Controller\Result\JsonFactory; use Magento\Framework\Controller\Result\Raw; use Magento\Framework\Controller\Result\RedirectFactory; class ResponseType extends \Magento\Framework\App\Action\Action { protected $pageFactory; protected $jsonFactory; protected $raw; protected $redirectFactory; public function __construct( Context $context, PageFactory $page, JsonFactory $jsonFactory, Raw $raw, RedirectFactory $redirectFactory ) { parent::__construct($context); $this->pageFactory = $page; $this->jsonFactory = $jsonFactory; $this->raw = $raw; $this->redirectFactory = $redirectFactory; } public function execute() { // return $this->pageFactory->create(); // return $this->jsonFactory->create()->setData(['name' => 'Abraão', 'city' => 'Rio de Janeiro', 'customer' => [ // 'name' => 'customer name', // 'email' => 'customer email' // ]]); // return $this->raw->setContents('That is my raw content'); $result = $this->redirectFactory->create(); return $result->setPath('learning/page/newroute'); } }
Fizemos um use Magento\Framework\Controller\Result\RedirectFactory;
. Modificamos o nosso construtor adicionando o RedirectFactory:
public function __construct( Context $context, PageFactory $page, JsonFactory $jsonFactory, Raw $raw, RedirectFactory $redirectFactory ) { parent::__construct($context); $this->pageFactory = $page; $this->jsonFactory = $jsonFactory; $this->raw = $raw; $this->redirectFactory = $redirectFactory; }
E modificamos o método execute()
em:
public function execute() { // return $this->pageFactory->create(); // return $this->jsonFactory->create()->setData(['name' => 'Abraão', 'city' => 'Rio de Janeiro', 'customer' => [ // 'name' => 'customer name', // 'email' => 'customer email' // ]]); // return $this->raw->setContents('That is my raw content'); $result = $this->redirectFactory->create(); return $result->setPath('learning/page/newroute'); }
Note que criamos a nossa factory a partir de $this->redirectFactory->create();
. Em $result->setPath('learning/page/newroute');
nós informamos a rota completa do novo Controller de redirecionamento.
Assim, ao acessar a nossa rota responsetype, somos redirecionados para a rota newroute, com a mudança de URL no browser e exibimos o conteúdo:
De maneira bem simples e rápida, criamos um Redirect no Magento 2.
Para se aprofundar nos seus estudos sobre Controller no Magento 2
Dúvidas? Posta aí!
Um abraço!