Cara mengatur dan mendapatkan data sesi pelanggan di magento 2

12

Saya berjuang dengan sesi Magento 2. Saya telah membuat file pengontrol di bawah ini sebagai kode sampel.

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

    }
}

Adakah yang bisa membantu saya dengan cara menetapkan data dan mengambilnya dari variabel sesi?

Terima kasih.

Aniket Shinde
sumber

Jawaban:

19

Anda dapat mengatur dan mendapatkan sesi pelanggan dengan menggunakan Magento\Customer\Model\Session

protected $customerSession;

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

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

Atau oleh manajer objek.

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$customerSession = $objectManager->create('Magento\Customer\Model\Session');
$customerSession->setMyValue('test');
$customerSession->getMyValue();
  1. Mengatur informasi ke sesi pelanggan:
$om = \Magento\Framework\App\ObjectManager::getInstance(); $session =
$om->get('Magento\Customer\Model\Session');  
$session->setTestKey('test value');
  1. Mendapatkan informasi dari sesi pelanggan:
$om = \Magento\Framework\App\ObjectManager::getInstance();  $session =
$om->get('Magento\Customer\Model\Session');
echo $session->getTestKey();

Sesi akan memperluas kelas inti Magento\Framework\Session\SessionManageruntuk menangani sesi.

Semoga jawaban ini akan membantu Anda.

Krishna ijjada
sumber
Saya mendapatkan kesalahan sebagai "Panggil ke fungsi anggota setMyValue () pada null" dengan set yang disediakan dan dapatkan kode sesi.
Aniket Shinde
Silakan periksa jawaban yang dimodifikasi yang ditambahkan oleh manajer objek.
Krishna ijjada
Terima kasih untuk bantuannya. Ini berfungsi dengan manajer objek, tetapi sepertinya meningkatkan waktu buka halaman. Saya mencobanya sebelum memposting pertanyaan.
Aniket Shinde
3

Anda perlu menyuntikkan \Magento\Customer\Model\Sessionkelas untuk mengatur dan mendapatkan data dalam sesi pelanggan

Menggunakan Injeksi Ketergantungan

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
}

Menggunakan 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
Pangeran Patel
sumber