Was ist das Äquivalent für die Sitzung in Magento 1?
Mage::getSingleton('core/session')->setMyValue('test');
Mage::getSingleton('core/session')->unsMyValue();
Gleiche in Magento 2?
Was ist das Äquivalent für die Sitzung in Magento 1?
Mage::getSingleton('core/session')->setMyValue('test');
Mage::getSingleton('core/session')->unsMyValue();
Gleiche in Magento 2?
Antworten:
Ich habe den entsprechenden Weg in Magento2 gefunden:
Mage::getSingleton('core/session')->setMyValue('test');
Mage::getSingleton('core/session')->unsMyValue();
Festlegen / Abrufen / Aufheben des Werts in der Hauptsitzung:
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();
}
Auf diese Weise können wir benutzerdefinierte Werte festlegen, wenn unser Sitzungswert nicht mit den folgenden Sitzungen zusammenhängt:
In Magento 2 gibt es nicht mehr core/session
.
Es gibt jedoch diese (können auch andere sein):
\Magento\Backend\Model\Session
\Magento\Catalog\Model\Session
\Magento\Checkout\Model\Session
\Magento\Customer\Model\Session
\Magento\Newsletter\Model\Session
Sie müssen eine Abhängigkeit für die Sitzung erstellen, die Sie in Ihrem Block oder Controller oder was auch immer benötigen.
Nehmen wir zum Beispiel \Magento\Catalog\Model\Session
.
protected $catalogSession;
public function __construct(
....
\Magento\Catalog\Model\Session $catalogSession,
....
){
....
$this->catalogSession = $catalogSession;
....
}
Dann können Sie die Katalogsitzung in der Klasse wie folgt verwenden:
$this->catalogSession->setMyValue('test');
$this->catalogSession->getMyValue();
[BEARBEITEN]
Sie sollten keine Sitzungen in Vorlagen verwenden.
Sie sollten Wrapper in der Blockklasse erstellen, die die Vorlagen verwenden können, um Werte festzulegen / abzurufen.
Erstellen Sie anhand des obigen Beispiels die Methoden im Block
public function setSessionData($key, $value)
{
return $this->catalogSession->setData($key, $value);
}
public function getSessionData($key, $remove = false)
{
return $this->catalogSession->getData($key, $remove);
}
Wenn Sie die Sitzung jedoch wirklich in der Vorlage verwenden möchten, können Sie einfach einen Wrapper in Ihrem Block erstellen, um die Sitzung abzurufen:
public function getCatalogSession()
{
return $this->catalogSession;
}
Dann können Sie dies in der Vorlage tun:
$this->getCatalogSession()->setMyValue('test');
$this->getCatalogSession()->getMyValue();
unsMyValue
Dies sind alle Sitzungstypen in 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
Gemäß dem Magento 2 ECGM2-Codierungsstandard verwenden Sie zuerst die Sitzungsklasse und können sie dann an den Konstruktor übergeben. Andernfalls wird dieser Fehler angezeigt
Das Sitzungsobjekt DARF NICHT im Konstruktor angefordert werden. Es kann nur als Methodenargument übergeben werden.
So können Sie Daten in einer Sitzung festlegen und abrufen
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;
}
}
Wert einstellen
$this->getCustomerSession()->setMyValue('YourValue');
Wert bekommen
$this->getCustomerSession()->getMyValue();
Für nicht eingestellten Sitzungswert
$this->getCustomerSession()->unsMyValue();