2016-03-03 31 views
3

我已经宣布观察员为controller_action_postdispatch事件。 在excecute方法中,我检查客户是否登录。如果不是,他应该重定向到登录页面。Magento 2.0如何在观察者中重定向

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?

回答

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

就是这样。现在它会重定向到客户登录页面。我已经与事件controller_action_predispatch

+0

不推荐对象管理的使用测试这一点。同意 –

+0

请编辑答案。 –

+0

哦,我不知道我可以这样做 - :) –

0

我曾尝试这个代码从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(); 

     } 
     }