Necesito redirigir al usuario a una página de destino si no está conectado. Encuentro un trabajo similar en este enlace . ¿Hay una solución para Magento 2?
                9
            
  
              
        Si queremos atrapar controller_action_predispatch, podemos seguir:
app / code / Vendor / Module / etc / events.xml
     <event name="controller_action_predispatch">
            <observer name="check_login_persistent" instance="Vendor\Module\Observer\CheckLoginPersistentObserver" />
     </event>
app / code / Vendor / Module / Observer / 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. }este código nunca se ejecutó su no es una variable con nombre de acción en el código. también en __construct (colocaste un "," al final que conduce a un error.Hay una solución mucho más fácil. Mira este archivo:
src / vendor / magento / module-sales / etc / di.xml
Entonces solo necesita usar el complemento de autenticación en su módulo di.xml
fuente
Para obtener más código de optimización y funcionamiento, puede seguir los pasos a continuación.
crear archivo de evento @ app \ code \ Vendor \ Module \ etc \ frontend \ events.xml
Crear la aplicación de archivo Observer \ code \ Vendor \ Module \ Model \ Observer.php
fuente