Cómo configurar y obtener datos de la sesión del cliente en magento 2

12

Estoy luchando con la sesión de magento 2. He creado a continuación el archivo del controlador como un código de muestra.

<?php
namespace vendor_name\module_name\Controller\SetGetSession;

use Magento\Framework\App\Action\Action;

class SetGetSession extends Action
{
    protected $customerSession;

    public function _construct(
        \Magento\Customer\Model\Session $customerSession
    ) {
        $this->customerSession = $customerSession;
    }   

    public function execute()
    {

    }
}

¿Alguien puede ayudarme con cómo asignar datos y recuperarlos de la variable de sesión?

Gracias.

Aniket Shinde
fuente

Respuestas:

19

Puede establecer y obtener una sesión de cliente utilizando Magento\Customer\Model\Session

protected $customerSession;

public function __construct(   
    \Magento\Customer\Model\Session $customerSession
){
    $this->customerSession = $customerSession;
}

$this->customerSession->setMyValue('test');
$this->customerSession->getMyValue();

O por el administrador de objetos.

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$customerSession = $objectManager->create('Magento\Customer\Model\Session');
$customerSession->setMyValue('test');
$customerSession->getMyValue();
  1. Establecer una información para la sesión del cliente:
$om = \Magento\Framework\App\ObjectManager::getInstance(); $session =
$om->get('Magento\Customer\Model\Session');  
$session->setTestKey('test value');
  1. Obteniendo información de la sesión del cliente:
$om = \Magento\Framework\App\ObjectManager::getInstance();  $session =
$om->get('Magento\Customer\Model\Session');
echo $session->getTestKey();

La sesión ampliará la clase principal Magento\Framework\Session\SessionManagerpara manejar la sesión.

Espero que esta respuesta te ayude.

Krishna ijjada
fuente
Recibo un error como "Llamar a una función miembro setMyValue () en nulo" con el conjunto proporcionado y obtener el código de sesión.
Aniket Shinde
Verifique la respuesta modificada agregada por el administrador de objetos.
Krishna ijjada
Gracias por la ayuda. Funciona con el administrador de objetos, pero parece que está aumentando el tiempo de carga de la página. Lo intenté antes de publicar la pregunta.
Aniket Shinde
3

Debe inyectar la \Magento\Customer\Model\Sessionclase para establecer y obtener datos en la sesión del cliente

Usando inyección de dependencia

protected $customerSession;

public function _construct(
    ...
    \Magento\Customer\Model\Session $customerSession
    ...
) {
    ...
    $this->customerSession = $customerSession;
    ...
}   

public function setValue()
{
    return $this->customerSession->setMyValue('YourValue'); //set value in customer session
}

public function getValue()
{
    return $this->customerSession->getMyValue(); //Get value from customer session
}

Usando Object Manager

$objectManager = \Magento\Framework\App\ObjectManager::getInstance(); 
$customerSession = $objectManager->get('Magento\Customer\Model\Session');

$customerSession->setMyValue('YourValue'); //set value in customer session
echo $customerSession->getMyValue(); //Get value from customer session
Príncipe Patel
fuente