Comment définir et obtenir des données de session client dans Magento 2

12

Je me bats avec la session magento 2. J'ai créé le fichier de contrôleur ci-dessous comme exemple de code.

<?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()
    {

    }
}

Quelqu'un peut-il m'aider à attribuer des données et à les récupérer à partir d'une variable de session?

Je vous remercie.

Aniket Shinde
la source

Réponses:

19

Vous pouvez définir et obtenir une session client en utilisant Magento\Customer\Model\Session

protected $customerSession;

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

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

Ou par le gestionnaire d'objets.

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$customerSession = $objectManager->create('Magento\Customer\Model\Session');
$customerSession->setMyValue('test');
$customerSession->getMyValue();
  1. Définition d'une information pour la session client:
$om = \Magento\Framework\App\ObjectManager::getInstance(); $session =
$om->get('Magento\Customer\Model\Session');  
$session->setTestKey('test value');
  1. Obtenir des informations de la session client:
$om = \Magento\Framework\App\ObjectManager::getInstance();  $session =
$om->get('Magento\Customer\Model\Session');
echo $session->getTestKey();

La session étendra la classe principale Magento\Framework\Session\SessionManagerpour gérer la session.

J'espère que cette réponse vous aidera.

Krishna ijjada
la source
Je reçois une erreur comme "Appel à une fonction membre setMyValue () sur null" avec l'ensemble fourni et obtenir le code de session.
Aniket Shinde
Veuillez vérifier la réponse modifiée ajoutée par le gestionnaire d'objets.
Krishna ijjada
Merci pour l'aide. Il fonctionne avec le gestionnaire d'objets, mais il semble qu'il augmente le temps de chargement des pages. Je l'ai essayé avant de poster la question.
Aniket Shinde
3

Vous devez injecter la \Magento\Customer\Model\Sessionclasse pour définir et obtenir des données dans la session client

Utilisation de l'injection de dépendance

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
}

Utilisation du gestionnaire d'objets

$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
Prince Patel
la source