如何在Magento 2中设置和获取客户会话数据


12

我正在努力进行magento 2会议。我已经在控制器文件下面创建了示例代码。

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

    }
}

任何人都可以帮助我如何分配数据并从会话变量中检索数据吗?

谢谢。

Answers:


19

您可以使用设置和获取“客户”会话 Magento\Customer\Model\Session

protected $customerSession;

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

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

或通过对象管理器。

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$customerSession = $objectManager->create('Magento\Customer\Model\Session');
$customerSession->setMyValue('test');
$customerSession->getMyValue();
  1. 为客户会话设置信息:
$om = \Magento\Framework\App\ObjectManager::getInstance(); $session =
$om->get('Magento\Customer\Model\Session');  
$session->setTestKey('test value');
  1. 从客户会话中获取信息:
$om = \Magento\Framework\App\ObjectManager::getInstance();  $session =
$om->get('Magento\Customer\Model\Session');
echo $session->getTestKey();

会话将扩展核心类Magento\Framework\Session\SessionManager以处理该会话。

希望这个答案对您有帮助。


我收到错误,因为“使用提供的set调用成员函数setMyValue()为null”并获取会话代码。
Aniket Shinde

请检查对象管理器添加的修改后答案。
克里希纳·伊贾达

谢谢您的帮助。它可以与对象管理器一起使用,但是看起来正在增加页面加载时间。我在发布问题之前尝试过。
Aniket Shinde

3

您需要注入\Magento\Customer\Model\Session类进行设置并在客户会话中获取数据

使用依赖注入

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
}

使用对象管理器

$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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.