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.

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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.