Magento 2.0如何在观察者中重定向

l00*_*00k 3 php magento2

我已经为controller_action_postdispatch事件声明了观察者.在excecute方法中,我检查客户是否已登录.如果不是,则应将其重定向到登录页面.

public function execute(\Magento\Framework\Event\Observer $observer)
{
  # check if user is logged in
  $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
  $customerSession = $this->objectManager->get('Magento\Customer\Model\Session');

  if(!$customerSession->isLoggedIn())
  {
    $request = $this->objectManager->get('Magento\Framework\App\Request\Http');

    if(strpos($request->getPathInfo(), '/customer/account/') !== 0)
    {
       # redirect to /customer/account/login
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

如何将客户端重定向到另一个URL?

R T*_*R T 5

这是如何做到的:

public function execute(\Magento\Framework\Event\Observer $observer)
{
  # check if user is logged in
  $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
  $customerSession = $objectManager->get('Magento\Customer\Model\Session');

  if(!$customerSession->isLoggedIn())
  {
    $request = $objectManager->get('Magento\Framework\App\Request\Http');
    //get instance for URL interface
    /** @var \Magento\Framework\UrlInterface $urlInterface */
    $urlInterface = $objectManager->get('Magento\Framework\UrlInterface');
    // URL to redirect to
    $url = $urlInterface->getUrl('customer/account/login');

    if(strpos($request->getPathInfo(), '/customer/account/') !== 0)
    {
        # redirect to /customer/account/login
        $observer->getControllerAction()
         ->getResponse()
         ->setRedirect($url);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

而已.现在它将重定向到客户登录页面.我用事件测试了这个controller_action_predispatch