【问题标题】:Magento 2.0 How to redirect in observerMagento 2.0 如何在观察者中重定向
【发布时间】:2016-03-03 13:50:41
【问题描述】:

我已经声明了 controller_action_postdispatch 事件的观察者。 在执行方法中,我检查客户是否已登录。如果没有,他应该被重定向到登录页面。

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
    }
  }
}

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

【问题讨论】:

    标签: php magento2


    【解决方案1】:

    可以这样做:

    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);
        }
      }
    }
    

    就是这样。现在它将重定向到客户登录页面。我已经用事件controller_action_predispatch测试了这个

    【讨论】:

    • 哦,我不知道我能做到这一点 - :)
    【解决方案2】:

    我已尝试使用此代码从 phtml 页面重定向到其他页面

     # 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
    
                 header('Location:'.$url );die();
    
            }
          }
    

    【讨论】:

      猜你喜欢
      • 2014-10-28
      • 2013-08-11
      • 1970-01-01
      • 2012-04-02
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      • 2011-03-10
      • 1970-01-01
      相关资源
      最近更新 更多