Observador de inicio de sesión: obtenga la dirección después de la redirección de registro

magento.stackexchange https://magento.stackexchange.com/questions/6718

  •  16-10-2019
  •  | 
  •  

Pregunta

Tengo un observador configurado para el inicio de sesión del cliente, y está disparando exactamente como lo necesito. Necesito tener acceso a la dirección de envío predeterminada del cliente dentro del observador, que cargo a través de:

$defaultShipping = $customer->getPrimaryShippingAddress( );

Esto funciona bien, excepto cuando el usuario se registra por primera vez; la $defaultShipping es nulo (supongo que en este punto es porque la dirección en sí aún no se ha guardado). He tratado de superar esto guardando explícitamente tanto al cliente como a todas las direcciones del cliente si $defaultShipping es null:

if( !$defaultShipping ) {
    $customer->save( );
    foreach( $customer->getAddresses( ) as $address ) {
        // Explicitly save each address (at this point there should only be one,
        // but looping just to be safe).  This should guarantee an ID for it 
        // exists
         $address->save( );
    }

    $defaultShipping = $customer->getPrimaryShippingAddress( );
}

Sin embargo, esto sigue dando null por $defaultShipping. ¿Estoy haciendo algo mal o hay otra forma de cargar la dirección de envío predeterminada? ¿El cliente no obtiene una dirección de envío predeterminada si sólo registrado (en cambio, debería elegir una dirección de la colección si $defaultShipping es inicialmente null?)

¿Fue útil?

Solución

Resulta que estaba un poco apagado. El envío predeterminado no está realmente configurado para clientes recién creados; Las direcciones en sí ya se guardan, como se puede demostrar aquí (dentro del mismo método de observador):

foreach( $customer->getAddresses( ) as $address ) {
     echo $address->getId( );
}
die;

Para solucionar mi problema, si el $defaultShipping El valor era nulo, simplemente tomé la primera dirección de la colección de direcciones del cliente como mi 'envío predeterminado' para usar. Si alguien tiene una mejor solución, no dude en compartir.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top