อะไรคือสิ่งที่เทียบเท่ากับเซสชันใน Magento 1
Mage::getSingleton('core/session')->setMyValue('test');
Mage::getSingleton('core/session')->unsMyValue();
เหมือนกันใน Magento 2
อะไรคือสิ่งที่เทียบเท่ากับเซสชันใน Magento 1
Mage::getSingleton('core/session')->setMyValue('test');
Mage::getSingleton('core/session')->unsMyValue();
เหมือนกันใน Magento 2
คำตอบ:
ฉันพบวิธีที่เท่าเทียมกันสำหรับเรื่องนี้ใน Magento2:
Mage::getSingleton('core/session')->setMyValue('test');
Mage::getSingleton('core/session')->unsMyValue();
Set / Get / Unset Value ใน Core Session:
protected $_coreSession;
public function __construct(
-----
\Magento\Framework\Session\SessionManagerInterface $coreSession
){
$this->_coreSession = $coreSession;
----
}
public function setValue(){
$this->_coreSession->start();
$this->_coreSession->setMessage('The Core session');
}
public function getValue(){
$this->_coreSession->start();
return $this->_coreSession->getMessage();
}
public function unSetValue(){
$this->_coreSession->start();
return $this->_coreSession->unsMessage();
}
ด้วยวิธีนี้เราสามารถตั้งค่าที่กำหนดเองถ้าค่าเซสชันของเราไม่เกี่ยวข้องกับเซสชันด้านล่าง:
ในวีโอไอพี 2 ไม่มีอีกcore/session
แล้ว
มีคนเหล่านี้แม้ว่า (อาจเป็นคนอื่นด้วย):
\Magento\Backend\Model\Session
\Magento\Catalog\Model\Session
\Magento\Checkout\Model\Session
\Magento\Customer\Model\Session
\Magento\Newsletter\Model\Session
คุณต้องสร้างการพึ่งพาสำหรับเซสชันที่คุณต้องการในบล็อกหรือตัวควบคุมหรืออะไรก็ตาม ลองยกตัวอย่างเช่น
\Magento\Catalog\Model\Session
protected $catalogSession;
public function __construct(
....
\Magento\Catalog\Model\Session $catalogSession,
....
){
....
$this->catalogSession = $catalogSession;
....
}
จากนั้นคุณสามารถใช้เซสชันแคตตาล็อกภายในชั้นเรียนเช่นนี้:
$this->catalogSession->setMyValue('test');
$this->catalogSession->getMyValue();
[แก้ไข]
คุณไม่ควรใช้เซสชันในแม่แบบ
คุณควรสร้างชุดในคลาสบล็อกที่แม่แบบสามารถใช้เพื่อตั้ง / รับค่า
ใช้ตัวอย่างด้านบนสร้างวิธีในบล็อก
public function setSessionData($key, $value)
{
return $this->catalogSession->setData($key, $value);
}
public function getSessionData($key, $remove = false)
{
return $this->catalogSession->getData($key, $remove);
}
แต่ถ้าคุณต้องการใช้เซสชันในเทมเพลตจริงๆคุณสามารถสร้างเสื้อคลุมในบล็อกของคุณเพื่อรับเซสชัน:
public function getCatalogSession()
{
return $this->catalogSession;
}
จากนั้นคุณสามารถทำได้ในเทมเพลต:
$this->getCatalogSession()->setMyValue('test');
$this->getCatalogSession()->getMyValue();
unsMyValue
นี่คือประเภทเซสชันทั้งหมดใน Magento 2
1) \Magento\Catalog\Model\Session //vendor/magento/module-catalog/Model/Session.php
2) \Magento\Newsletter\Model\Session //vendor/magento/module-newsletter/Model/Session.php
3) \Magento\Persistent\Model\Session //vendor/magento/module-persistent/Model/Session.php
4) \Magento\Customer\Model\Session //vendor/magento/module-customer/Model/Session.php
5) \Magento\Backend\Model\Session //vendor/magento/module-backend/Model/Session.php
6) \Magento\Checkout\Model\Session //vendor/magento/module-checkout/Model/Session.php
ตามมาตรฐานการเข้ารหัสวีโอไอพี 2 ECGM2 คุณใช้คลาสเซสชั่นครั้งแรกจากนั้นคุณสามารถส่งมันไปยังตัวสร้างมิฉะนั้นข้อผิดพลาดนี้จะปรากฏขึ้น
วัตถุเซสชั่นจะต้องไม่ถูกร้องขอในตัวสร้าง มันสามารถถูกส่งผ่านเป็นอาร์กิวเมนต์วิธี
นี่คือวิธีที่คุณสามารถตั้งค่าและรับข้อมูลในเซสชัน
namespace vendor\module\..;
use Magento\Catalog\Model\Session as CatalogSession;
use Magento\Customer\Model\Session as CustomerSession;
use Magento\Checkout\Model\Session as CheckoutSession;
use \Magento\Framework\Session\SessionManagerInterface as CoreSession
class ClassName {
...
protected $_coreSession;
protected $_catalogSession;
protected $_customerSession;
protected $_checkoutSession;
public function __construct(
....
CoreSession $coreSession,
CatalogSession $catalogSession,
CustomerSession $customerSession,
CheckoutSession $checkoutSession,
....
){
....
$this->_coreSession = $coreSession;
$this->_catalogSession = $catalogSession;
$this->_checkoutSession = $checkoutSession;
$this->_customerSession = $customerSession;
....
}
public function getCoreSession()
{
return $this->_coreSession;
}
public function getCatalogSession()
{
return $this->_catalogSession;
}
public function getCustomerSession()
{
return $this->_customerSession;
}
public function getCheckoutSession()
{
return $this->_checkoutSession;
}
}
เพื่อกำหนดค่า
$this->getCustomerSession()->setMyValue('YourValue');
เพื่อให้ได้ค่า
$this->getCustomerSession()->getMyValue();
สำหรับล้างค่าเซสชั่น
$this->getCustomerSession()->unsMyValue();