Magento 2.0 Как перенаправить в наблюдателе

Я объявил наблюдателя для события controller_action_postdispatch. В методе execute я проверяю, вошел ли клиент в систему. Если нет, он должен быть перенаправлен на страницу входа.

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?


person l00k    schedule 03.03.2016    source источник


Ответы (2)


Вот как это можно сделать:

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

person R T    schedule 17.03.2016
comment
О, я не знал, что я могу сделать это - :) - person Daniel Kenney; 02.10.2016

Я пробовал этот код для перенаправления на другую страницу со страницы 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();

        }
      }
person Naveenbos    schedule 22.12.2016