Magento'da oturum için eşdeğeri nedir 1
Mage::getSingleton('core/session')->setMyValue('test');
Mage::getSingleton('core/session')->unsMyValue();
Magento 2'de aynı mı?
Magento'da oturum için eşdeğeri nedir 1
Mage::getSingleton('core/session')->setMyValue('test');
Mage::getSingleton('core/session')->unsMyValue();
Magento 2'de aynı mı?
Yanıtlar:
Magento2'de buna eşdeğer bir yol buldum:
Mage::getSingleton('core/session')->setMyValue('test');
Mage::getSingleton('core/session')->unsMyValue();
Çekirdek Oturumunda Set / Get / Unset Değeri:
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();
}
Bu şekilde, oturum değerimiz aşağıdaki oturumlarla ilgili değilse, özel değerler ayarlayabiliriz:
Magento 2'de artık yok core/session
.
Bu olanlar da var (diğerleri de olabilir):
\Magento\Backend\Model\Session
\Magento\Catalog\Model\Session
\Magento\Checkout\Model\Session
\Magento\Customer\Model\Session
\Magento\Newsletter\Model\Session
Bloğunuzda veya kontrol cihazınızda ya da her neyse ihtiyacınız olan oturum için bir bağımlılık yaratmanız gerekir.
Örneğin alalım \Magento\Catalog\Model\Session
.
protected $catalogSession;
public function __construct(
....
\Magento\Catalog\Model\Session $catalogSession,
....
){
....
$this->catalogSession = $catalogSession;
....
}
Daha sonra aşağıdaki gibi sınıf içindeki katalog oturumunu kullanabilirsiniz:
$this->catalogSession->setMyValue('test');
$this->catalogSession->getMyValue();
[EDIT]
Oturumlarda şablon kullanmamalısınız.
Blok sınıfında, değerleri ayarlamak / almak için şablonların kullanabileceği sarmalayıcılar oluşturmalısınız.
Yukarıdaki örneği kullanarak, blokta yöntemleri oluşturun
public function setSessionData($key, $value)
{
return $this->catalogSession->setData($key, $value);
}
public function getSessionData($key, $remove = false)
{
return $this->catalogSession->getData($key, $remove);
}
Ancak oturumu şablonda kullanmak istiyorsanız, oturumu almak için bloğunuzda bir sarmalayıcı oluşturabilirsiniz:
public function getCatalogSession()
{
return $this->catalogSession;
}
Sonra bunu şablonda yapabilirsiniz:
$this->getCatalogSession()->setMyValue('test');
$this->getCatalogSession()->getMyValue();
unsMyValue
Bunların hepsi Magento 2'deki oturum tipleri
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
Magento 2 ECGM2 kodlama standardına göre, ilk önce oturum sınıfını kullanırsınız, sonra bunu yapıcıya geçirebilirsiniz, aksi takdirde bu hata gösterilecektir.
Yapımcıda oturum nesnesi istenmemelidir. Sadece bir metod argümanı olarak geçilebilir.
Oturumu nasıl ayarlayabileceğiniz ve veri alabileceğiniz
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;
}
}
Değer ayarlamak
$this->getCustomerSession()->setMyValue('YourValue');
Değer almak
$this->getCustomerSession()->getMyValue();
Ayarlanmamış oturum değeri için
$this->getCustomerSession()->unsMyValue();