Перенаправление из блока не работает


Я пытаюсь перенаправить из блока, но это не работает. Но одни и те же методы работают в разных проектах.

1. Процесс 1

public function __construct(
    \Magento\Framework\View\Element\Template\Context $context,
    \Vendor\PaymentGateway\Helper\Data $storeHelper,
    \Magento\Sales\Api\Data\OrderInterface $order,
    \Magento\Framework\App\Response\Http $response,
    \Magento\Sales\Model\Order $orderModel,      
    \Vendor\PaymentGateway\Model\CreateorderFactory $createorder,
    \Vendor\PaymentGateway\Model\PaymentresponseFactory $paymentResponse,
    \Magento\Checkout\Model\Session $checkoutSession,
    \Magento\Sales\Model\OrderFactory $orderFactory,
    \Magento\Sales\Model\Order\Email\Sender\OrderSender $orderEmailSender,
    \Magento\Framework\Controller\Result\RedirectFactory $redirectFactory,
    array $data = []
) {
    parent::__construct($context, $data);
    $this->storeHelper  = $storeHelper;
    $this->order = $order;
    $this->response = $response;
    $this->orderModel = $orderModel;
    $this->createorder = $createorder;
    $this->paymentResponse = $paymentResponse;
    $this->checkoutSession = $checkoutSession;
    $this->orderFactory = $orderFactory;
    $this->orderEmailSender = $orderEmailSender;
    $this->redirectFactory = $redirectFactory;
}
public function redirectAccordingToStatus($status='30')
{
    echo 'redirect from here  ' , $this->getBaseUrl().$this->REDIRECT_URL[$status] ;
    //return $this->redirectFactory->create()->setPath($this->REDIRECT_URL[$status]);
    $this->response->setRedirect($this->getBaseUrl().$this->REDIRECT_URL[$status]);
    exit;
}

2. Процесс 2: С тем же конструктором, но другим подходом.

return $this->redirectFactory->create()->setPath('paym/payment/cancel');

Ни один из этих методов не работает. Я подумал, что некоторые классы могут конфликтовать с ним, поэтому я вставил весь код конструктора.

Также нет ошибок во время setup:di:compile и в журналах. Если вы знаете о любой другой подход, пожалуйста, предложите этот.

Author: Purushotam Sangroula, 2018-01-25

2 answers

   protected $_responseFactory;
    protected $url;

    public function __construct(

        \Magento\Framework\App\ResponseFactory $responseFactory,

    ) {
        $this->_responseFactory = $responseFactory;
        $this->url = $context->getUrlBuilder();;
    }

ИСПОЛЬЗУЙТЕ ВОТ ТАК::

  $CustomRedirectionUrl = $this->url->getUrl('[ModuleName]/[ModuleName]/[[Action]');
                $this->_responseFactory->create()->setRedirect($CustomRedirectionUrl)->sendResponse();
 1
Author: Birjitsinh Zala, 2018-01-25 09:52:49

Вы можете достичь этого с помощью Процесса 2, с небольшим изменением.

Вы должны использовать ResultFactory вместо RedirectFactory, и вы должны указать тип как перенаправление, поэтому ваш код следует изменить на

public function __construct(
    ................
    .......................
    \Magento\Framework\Controller\ResultFactory $resultFactory,
) {
    parent::__construct($context, $data);
    ........
    ..........
    $this->resultFactory = $resultFactory;
}
public function redirectAccordingToStatus($status='30')
{
    $resultRedirect = $this->resultFactory->create(\Magento\Framework\Controller\ResultFactory::TYPE_REDIRECT);
    return $resultRedirect->setPath('paym/payment/cancel');
}

Снова запустите обновление установки и проверьте, работает ли оно.

 0
Author: MGento, 2018-01-25 06:51:17