Saltar al contenido

Redirigir desde el complemento Magento 2

Este equipo de redactores ha pasado horas investigando para darle soluciones a tus preguntas, te dejamos la respuestas así que deseamos resultarte de mucha apoyo.

Solución:

No estoy seguro exactamente de lo que está tratando de lograr aquí, pero si limita su problema a redirigir a una URL diferente de un complemento, puedo darle algunas ideas.
Desde el MagentoCustomerApiAccountManagementInterface no actúa como controlador tal vez no debería intentar redireccionar desde uno de los métodos desde la implementación de esta interfaz.
solo los controladores deben manejar la solicitud y enviar la respuesta.
El método initiatePasswordReset se llama desde 2 acciones del controlador MagentoCustomerControllerAdminhtmlIndexResetPassword::execute y MagentoCustomerControllerAccountForgotPasswordPost::execute.
Tal vez debería agregar estos métodos usando after o around.
Ambos métodos anteriores devuelven una instancia de MagentoBackendModelViewResultRedirect por lo que es bastante fácil cambiar el valor de retorno de ellos a través de un complemento. (Yo sugiero after, pero es posible que necesites around, no estoy seguro de sus requisitos).

un complemento posterior podría verse así (pero ya lo sabe):

public function afterExecute(
     MagentoCustomerControllerAccountResetPassword $subject, $redirect, 
     MagentoBackendModelViewResultRedirect $redirect
) 
     //custom logic in here;
     if (your condition) 
          $redirect->setPath('custom/action/page');
     
     return $redirect;

Si tiene mucha lógica personalizada, para evitar la duplicación de contenido, puede mover la lógica a una clase personalizada y usar esa clase como una dependencia en los dos complementos que está creando.

A continuación se muestra un ejemplo de trabajo de mi propio código. Solo requiere 2 archivos.

Crear di.xml expediente



    
        
    

Crea el archivo del complemento

Según nuestra discusión, estoy compartiendo una idea que podría ayudarlo.

  • Primero, pase una variable de registro de initiatePasswordReset, esa variable de registro contendrá la URL deseada.
  • Entonces en
    controller_action_postdispatch_customer_account_forgotPasswordPostevento captura ese valor de variable de registro, esa página

Crear complemento sobre initiatePasswordReset llamar y usar después, antes, el método depende de su elección.

Aquí, estoy usando el método Around.

[email protected]
 * Date: 19-05-2018
 * Time: 17:03
 */

namespace StackExchangeWorksPlugin;


use MagentoFrameworkRegistry;

class InitiatePasswordResetPlugin

    protected $registry;
    public function __construct(
        Registry $registry
    )
    
        $this->registry = $registry;
    
    public function aroundInitiatePasswordReset(
        MagentoCheckoutModelSession $subject,
        Closure $proceed,
        $email,
        $template,
        $websiteId
    )
    
        // Do business logic here
        if($this->registry->registry('my_custom_redirect'))
            $this->registry->unregister('my_custom_redirect');
        
        $this->registry->register('my_custom_redirect','YourUrl');
        return $proceed($email, $template, $websiteId);

    


Ahora, controller_action_postdispatch_customer_account_forgotPasswordPost evento,

redirigir esa URL my_custom_redirect.

registry = $registry;
        $this->actionFlag        = $actionFlag;
    

    public function execute(Observer $observer)
    

        $action = $observer->getEvent()->getControllerAction();

        if($this->registry->registry('my_custom_redirect'))
            $this->actionFlag->set('', MagentoFrameworkAppActionInterface::FLAG_NO_DISPATCH, true);
            $action->getResponse()->setRedirect($this->registry->registry('my_custom_redirect'));
            return $this;
        
        return $this;
    

Sección de Reseñas y Valoraciones

Agradecemos que desees añadir valor a nuestra información contribuyendo tu experiencia en los comentarios.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *