Мне нужно перенаправить пользователя на целевую страницу, если он не вошел в систему. По этой ссылке я нахожу аналогичную работу . Есть ли решение для Magento 2?
9
Если мы хотим поймать controller_action_predispatch
, мы можем следовать:
Приложение / код / Vendor / модуль / и т.д. / events.xml
<event name="controller_action_predispatch">
<observer name="check_login_persistent" instance="Vendor\Module\Observer\CheckLoginPersistentObserver" />
</event>
Приложение / код / Vendor / модуль / наблюдатель / CheckLoginPersistentObserver.php
namespace Vendor\Module\Observer;
use Magento\Framework\Event\ObserverInterface;
class CheckLoginPersistentObserver implements ObserverInterface
{
/**
* @var \Magento\Framework\App\Response\RedirectInterface
*/
protected $redirect;
/**
* Customer session
*
* @var \Magento\Customer\Model\Session
*/
protected $_customerSession;
public function __construct(
\Magento\Customer\Model\Session $customerSession,
\Magento\Framework\App\Response\RedirectInterface $redirect
) {
$this->_customerSession = $customerSession;
$this->redirect = $redirect;
}
public function execute(\Magento\Framework\Event\Observer $observer)
{
$actionName = $observer->getEvent()->getRequest()->getFullActionName();
$controller = $observer->getControllerAction();
$openActions = array(
'create',
'createpost',
'login',
'loginpost',
'logoutsuccess',
'forgotpassword',
'forgotpasswordpost',
'resetpassword',
'resetpasswordpost',
'confirm',
'confirmation'
);
if ($controller == 'account' && in_array($actionName, $openActions)) {
return $this; //if in allowed actions do nothing.
}
if(!$this->_customerSession->isLoggedIn()) {
$this->redirect->redirect($controller->getResponse(), 'customer/account/login');
}
}
}
if ($controller == 'account' && in_array($action, $openActions)) { return $this; //if in allowed actions do nothing. }
этот код никогда не выполнялся, это не переменная с именем действия в коде. также в __construct (вы поставили «,» в конце, что приводит к ошибке.Существует гораздо более простое решение. Посмотрите на этот файл:
SRC / поставщик / Magento / модуль-продажи / и т.д. / di.xml
Так что вам просто нужно использовать плагин аутентификации в вашем модуле di.xml
источник
Для большей оптимизации и работы кода вы можете выполнить следующие шаги.
создать файл событий @ app \ code \ Vendor \ Module \ etc \ frontend \ events.xml
Создайте файл приложения Observer \ code \ Vendor \ Module \ Model \ Observer.php
источник