Tương đương với phiên trong Magento 1 là gì
Mage::getSingleton('core/session')->setMyValue('test');
Mage::getSingleton('core/session')->unsMyValue();
Tương tự trong Magento 2?
Tương đương với phiên trong Magento 1 là gì
Mage::getSingleton('core/session')->setMyValue('test');
Mage::getSingleton('core/session')->unsMyValue();
Tương tự trong Magento 2?
Câu trả lời:
Tôi đã tìm thấy cách tương đương cho điều này trong Magento2:
Mage::getSingleton('core/session')->setMyValue('test');
Mage::getSingleton('core/session')->unsMyValue();
Đặt / Nhận / Bỏ đặt giá trị trong phiên cốt lõi:
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();
}
Bằng cách này, chúng tôi có thể đặt giá trị tùy chỉnh nếu giá trị phiên của chúng tôi không liên quan đến các phiên bên dưới:
Trong magento 2 không còn nữa core/session
.
Có những cái này mặc dù (cũng có thể là những cái khác):
\Magento\Backend\Model\Session
\Magento\Catalog\Model\Session
\Magento\Checkout\Model\Session
\Magento\Customer\Model\Session
\Magento\Newsletter\Model\Session
Bạn cần tạo một phụ thuộc cho phiên bạn cần trong khối hoặc bộ điều khiển của bạn hoặc bất cứ điều gì.
Hãy lấy ví dụ \Magento\Catalog\Model\Session
.
protected $catalogSession;
public function __construct(
....
\Magento\Catalog\Model\Session $catalogSession,
....
){
....
$this->catalogSession = $catalogSession;
....
}
Sau đó, bạn có thể sử dụng phiên danh mục bên trong lớp như thế này:
$this->catalogSession->setMyValue('test');
$this->catalogSession->getMyValue();
[EDIT]
Bạn không nên sử dụng phiên trong mẫu.
Bạn nên tạo các hàm bao trong lớp khối mà các mẫu có thể sử dụng để đặt / nhận giá trị.
Sử dụng ví dụ trên, tạo các phương thức trong khối
public function setSessionData($key, $value)
{
return $this->catalogSession->setData($key, $value);
}
public function getSessionData($key, $remove = false)
{
return $this->catalogSession->getData($key, $remove);
}
Nhưng nếu bạn thực sự muốn sử dụng phiên trong mẫu, bạn chỉ có thể tạo trình bao bọc trong khối để nhận phiên:
public function getCatalogSession()
{
return $this->catalogSession;
}
Sau đó, bạn có thể làm điều này trong mẫu:
$this->getCatalogSession()->setMyValue('test');
$this->getCatalogSession()->getMyValue();
unsMyValue
Đây là tất cả các loại phiên trong 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
Theo tiêu chuẩn mã hóa Magento 2 ECGM2, trước tiên bạn sử dụng lớp phiên sau đó bạn có thể chuyển nó vào hàm tạo nếu không lỗi này sẽ được hiển thị
Đối tượng phiên PHẢI KHÔNG được yêu cầu trong hàm tạo. Nó chỉ có thể được thông qua như là một đối số phương thức.
Đây là cách bạn có thể thiết lập và nhận dữ liệu trong phiên
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;
}
}
Để đặt giá trị
$this->getCustomerSession()->setMyValue('YourValue');
Để có được giá trị
$this->getCustomerSession()->getMyValue();
Đối với giá trị phiên Unset
$this->getCustomerSession()->unsMyValue();