我已经声明了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?
这是
。可以做到的:
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
对此进行了测试
我已经尝试过从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();
}
}