我已经为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?
这是如何做到的:
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
| 归档时间: |
|
| 查看次数: |
2813 次 |
| 最近记录: |