Magento2:从观察者重定向

Ami*_*era 0 redirect observers magento2

我们已经知道如何从观察者重定向到 magento 1.x版本。

但是对于magento 2,我们不知道如何从观察者那里强制执行重定向

我已经完成了google,但没有得到任何答案。

Ami*_*era 5

是的,我通过研究自己找到了解决方案

如果你想这样做,那么上__construct()的功能your class observer你必须注入两类

  • 首先,\Magento\Framework\App\ResponseFactory负责重定向
  • 另一个\Magento\Framework\UrlInterface将为该重定向创建url的类。
  • 然后为创建对象ResponseFactory ,并使用 setRedirect($YourUrl)->sendResponse();重定向到您希望的网址。

观察者

<?php
namespace [Vendor]\[modulename]\Observer;
use \Magento\Framework\Event\Observer;
use \Magento\Framework\Event\ObserverInterface;
class [YourClass] implements ObserverInterface {
    protected $_responseFactory;
    protected $_url;
    public function __construct(
        ......
        \Magento\Framework\App\ResponseFactory $responseFactory,
        \Magento\Framework\UrlInterface $url,
        ......
    ) {
        $this->_responseFactory = $responseFactory;
        $this->_url = $url;
    }
    public function execute(Observer $observer) {
             $event = $observer->getEvent();
             $CustomRedirectionUrl = $this->_url->getUrl('[ModuleName]/[ModuleName]/[[Action]');
            $this->_responseFactory->create()->setRedirect($CustomRedirectionUrl)->sendResponse();
            /* die use for stop excaution */
             die();
    }
}
Run Code Online (Sandbox Code Playgroud)

例:

在这里,我写了一个重定向示例。

基本上是sales_quote_collect_totals_after活动,我试图强制重定向以与我们联系。

这里的观察者代码:

<?php
namespace Devamit\Mgoto\Observer;
use \Magento\Framework\Event\Observer;
use \Magento\Framework\Event\ObserverInterface;

class Challo implements ObserverInterface {
    protected $_responseFactory;
    protected $_url;

    public function __construct(

        \Magento\Framework\App\ResponseFactory $responseFactory,
        \Magento\Framework\UrlInterface $url
    ) {
        $this->_responseFactory = $responseFactory;
        $this->_url = $url;
    }

    public function execute(Observer $observer) {
        $event = $observer->getEvent();

            $myfile = fopen("var/log/debug.log", "a+") or die("Unable to open file!");
          fwrite($myfile, 'Amitber',true);
          fclose($myfile);
      // $this->_responseFactory->create()->setRedirect('www.google.com')->sendResponse();
           $customerBeforeAuthUrl = $this->_url->getUrl('contact/index/index');
          $this->_responseFactory->create()->setRedirect($customerBeforeAuthUrl)->sendResponse();
       die();
    }
}
Run Code Online (Sandbox Code Playgroud)