Jak ustawić i uzyskać dane sesji klienta w Magento 2

12

Walczę z sesją Magento 2. Utworzyłem poniżej pliku kontrolera jako przykładowy kod.

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

    }
}

Czy ktoś może mi pomóc w przypisywaniu danych i pobieraniu ich ze zmiennej sesji?

Dziękuję Ci.

Aniket Shinde
źródło

Odpowiedzi:

19

Możesz ustawić i uzyskać sesję klienta za pomocą Magento\Customer\Model\Session

protected $customerSession;

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

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

Lub przez menedżera obiektów.

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$customerSession = $objectManager->create('Magento\Customer\Model\Session');
$customerSession->setMyValue('test');
$customerSession->getMyValue();
  1. Ustawienie informacji dla sesji klienta:
$om = \Magento\Framework\App\ObjectManager::getInstance(); $session =
$om->get('Magento\Customer\Model\Session');  
$session->setTestKey('test value');
  1. Uzyskiwanie informacji z sesji klienta:
$om = \Magento\Framework\App\ObjectManager::getInstance();  $session =
$om->get('Magento\Customer\Model\Session');
echo $session->getTestKey();

Sesja rozszerzy klasę podstawową Magento\Framework\Session\SessionManagerdo obsługi sesji.

Mam nadzieję, że ta odpowiedź pomoże ci.

Krishna ijjada
źródło
Pojawia się błąd jako „Wywołanie funkcji członkowskiej setMyValue () w wartości null” z podanym zestawem i pobranie kodu sesji.
Aniket Shinde
Sprawdź zmodyfikowaną odpowiedź dodaną przez menedżera obiektów.
Krishna ijjada
Dzięki za pomoc. Działa z menedżerem obiektów, ale wygląda na to, że wydłuża czas ładowania strony. Próbowałem przed opublikowaniem pytania.
Aniket Shinde
3

Musisz wstrzyknąć \Magento\Customer\Model\Sessionklasę dla zestawu i uzyskać dane w sesji klienta

Korzystanie z wstrzykiwania zależności

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
}

Korzystanie z Menedżera obiektów

$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
Książę Patel
źródło