Magento 2 Controller Forward

Anteriormente, falamos sobre Response Type Redirect e como utilizá-lo para fazer um redirecionamento de uma Rota A para uma Rota B. Neste artigo, vamos falar sobre Magento 2 Controller Forward.

Magento 2 Controller Forward

O response type Forward é utilizado para fazer um redirecionamento interno. Enquanto que no response type Redirect vimos como fazer um redirecionamento de uma Rota A para uma Rota B, havendo a mudança de URL, no response type Forward temos o redirecionamento da Rota A para uma Rota B sem ocorrer a mudança de URL. Ou seja, a rota A redireciona para a Rota B, exibindo o conteúdo da Rota B, mas permanece a URL da Rota A, isso é o redirecionamento interno.

Então, voltando a nosso Controller, temos as seguintes modificações:

<?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;
use Magento\Framework\Controller\Result\ForwardFactory;

class ResponseType extends \Magento\Framework\App\Action\Action
{
    protected $pageFactory;
    protected $jsonFactory;
    protected $raw;
    protected $redirectFactory;
    protected $forwardFactory;

    public function __construct(
        Context $context,
        PageFactory $page,
        JsonFactory $jsonFactory,
        Raw $raw,
        RedirectFactory $redirectFactory,
        ForwardFactory $forwardFactory
    ) {
        parent::__construct($context);
        $this->pageFactory = $page;
        $this->jsonFactory = $jsonFactory;
        $this->raw = $raw;
        $this->redirectFactory = $redirectFactory;
        $this->forwardFactory = $forwardFactory;
    }

    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');
        $forwardFactory = $this->forwardFactory->create();
        return $forwardFactory->setModule('learning')->setController('page')->forward('newroute');
    }
}

Fizemos um use Magento\Framework\Controller\Result\ForwardFactory; e modificamos o nosso construtor:

public function __construct(
        Context $context,
        PageFactory $page,
        JsonFactory $jsonFactory,
        Raw $raw,
        RedirectFactory $redirectFactory,
        ForwardFactory $forwardFactory
    ) {
        parent::__construct($context);
        $this->pageFactory = $page;
        $this->jsonFactory = $jsonFactory;
        $this->raw = $raw;
        $this->redirectFactory = $redirectFactory;
        $this->forwardFactory = $forwardFactory;
    }

E modificamos o nosso execute():

    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');
        $forwardFactory = $this->forwardFactory->create();
        return $forwardFactory->setModule('learning')->setController('page')->forward('newroute');
    }

Criamos a nossa fábrica para o forward $forwardFactory = $this->forwardFactory->create(); .

return $forwardFactory->setModule('learning')->setController('page')->forward('newroute');

Em $forwardFactory->setModule('learning') setamos o nosso módulo. Em ->setController('page') setamos o nosso Controller e em ->forward('newroute'); setamos o controller para o qual ocorrerá o redirecionamento interno.

Ao acessar a nossa rota learning/page/responsetype ocorre o redirecionamento interno para a rota learning/page/newroute sem ocorrer a mudança de URL.

Magento 2 - Controller Response Type Forward

Para se aprofundar nos seus estudos sobre Controller no Magento 2

Dúvidas? Posta aí!

Um abraço!

 

Deixe um comentário

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