Apa yang setara untuk sesi di Magento 1
Mage::getSingleton('core/session')->setMyValue('test');
Mage::getSingleton('core/session')->unsMyValue();
Sama di Magento 2?
Apa yang setara untuk sesi di Magento 1
Mage::getSingleton('core/session')->setMyValue('test');
Mage::getSingleton('core/session')->unsMyValue();
Sama di Magento 2?
Jawaban:
Saya menemukan cara yang setara untuk ini di Magento2:
Mage::getSingleton('core/session')->setMyValue('test');
Mage::getSingleton('core/session')->unsMyValue();
Tetapkan / Dapatkan / Hapus Nilai dalam Sesi Inti:
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();
}
Dengan cara ini kami dapat menetapkan nilai khusus jika nilai sesi kami tidak terkait dengan sesi di bawah ini:
Di Magento 2 tidak ada lagi core/session
.
Ada yang ini (mungkin orang lain juga):
\Magento\Backend\Model\Session
\Magento\Catalog\Model\Session
\Magento\Checkout\Model\Session
\Magento\Customer\Model\Session
\Magento\Newsletter\Model\Session
Anda perlu membuat ketergantungan untuk sesi yang Anda butuhkan di blok atau pengontrol Anda atau apa pun.
Mari kita ambil contoh \Magento\Catalog\Model\Session
.
protected $catalogSession;
public function __construct(
....
\Magento\Catalog\Model\Session $catalogSession,
....
){
....
$this->catalogSession = $catalogSession;
....
}
Kemudian Anda dapat menggunakan sesi katalog di dalam kelas seperti ini:
$this->catalogSession->setMyValue('test');
$this->catalogSession->getMyValue();
[EDIT]
Anda sebaiknya tidak menggunakan sesi di templat.
Anda harus membuat pembungkus di kelas blok yang dapat digunakan templat untuk menetapkan / mendapatkan nilai.
Dengan menggunakan contoh di atas, buat metode di blok
public function setSessionData($key, $value)
{
return $this->catalogSession->setData($key, $value);
}
public function getSessionData($key, $remove = false)
{
return $this->catalogSession->getData($key, $remove);
}
Tetapi jika Anda benar-benar ingin menggunakan sesi dalam template Anda bisa membuat pembungkus di blok Anda untuk mendapatkan sesi:
public function getCatalogSession()
{
return $this->catalogSession;
}
Kemudian Anda dapat melakukan ini di templat:
$this->getCatalogSession()->setMyValue('test');
$this->getCatalogSession()->getMyValue();
unsMyValue
Ini semua adalah tipe sesi di 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
Sesuai standar pengkodean Magento 2 ECGM2 Anda pertama kali menggunakan kelas sesi maka Anda dapat meneruskannya ke konstruktor jika tidak, kesalahan ini akan ditampilkan
Objek sesi TIDAK HARUS diminta dalam konstruktor. Itu hanya bisa diteruskan sebagai argumen metode.
Inilah cara Anda dapat mengatur dan mendapatkan data dalam sesi
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;
}
}
Untuk menetapkan nilai
$this->getCustomerSession()->setMyValue('YourValue');
Untuk mendapatkan nilai
$this->getCustomerSession()->getMyValue();
Untuk Hapus nilai sesi
$this->getCustomerSession()->unsMyValue();