Como definir e obter dados da sessão do cliente no magento 2


12

Estou lutando com a sessão do magento 2. Eu criei abaixo o arquivo do controlador como um código de exemplo.

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

    }
}

Alguém pode me ajudar com como atribuir dados e recuperá-los da variável de sessão?

Obrigado.

Respostas:


19

Você pode definir e obter a sessão do cliente usando 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 pelo gerenciador de objetos.

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$customerSession = $objectManager->create('Magento\Customer\Model\Session');
$customerSession->setMyValue('test');
$customerSession->getMyValue();
  1. Configurando uma informação para a sessão do cliente:
$om = \Magento\Framework\App\ObjectManager::getInstance(); $session =
$om->get('Magento\Customer\Model\Session');  
$session->setTestKey('test value');
  1. Obtendo uma informação da sessão do cliente:
$om = \Magento\Framework\App\ObjectManager::getInstance();  $session =
$om->get('Magento\Customer\Model\Session');
echo $session->getTestKey();

A sessão estenderá a classe principal Magento\Framework\Session\SessionManagerpara lidar com a sessão.

Espero que esta resposta o ajude.


Estou recebendo um erro como "Chamar para uma função de membro setMyValue () em null" com o conjunto fornecido e obter o código da sessão.
Aniket Shinde

Verifique a resposta modificada adicionada pelo gerenciador de objetos.
Krishna ijjada

Obrigado pela ajuda. Funciona com o gerenciador de objetos, mas parece que está aumentando o tempo de carregamento da página. Eu tentei antes de postar a pergunta.
Aniket Shinde

3

Você precisa injetar \Magento\Customer\Model\Sessionclasse para definir e obter dados na sessão do cliente

Usando injeção de dependência

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 o Gerenciador de Objetos

$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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.