Qual è l'equivalente per la sessione in Magento 1
Mage::getSingleton('core/session')->setMyValue('test');
Mage::getSingleton('core/session')->unsMyValue();
Lo stesso in Magento 2?
Qual è l'equivalente per la sessione in Magento 1
Mage::getSingleton('core/session')->setMyValue('test');
Mage::getSingleton('core/session')->unsMyValue();
Lo stesso in Magento 2?
Risposte:
Ho trovato il modo equivalente per questo in Magento2:
Mage::getSingleton('core/session')->setMyValue('test');
Mage::getSingleton('core/session')->unsMyValue();
Imposta / Ottieni / Annulla valore nella sessione principale:
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();
}
In questo modo possiamo impostare valori personalizzati se il nostro valore di sessione non è correlato alle sessioni seguenti:
In magento 2 non c'è più core/session
.
Ce ne sono però (potrebbero essercene anche altri):
\Magento\Backend\Model\Session
\Magento\Catalog\Model\Session
\Magento\Checkout\Model\Session
\Magento\Customer\Model\Session
\Magento\Newsletter\Model\Session
Devi creare una dipendenza per la sessione di cui hai bisogno nel tuo blocco o controller o altro.
Prendiamo ad esempio \Magento\Catalog\Model\Session
.
protected $catalogSession;
public function __construct(
....
\Magento\Catalog\Model\Session $catalogSession,
....
){
....
$this->catalogSession = $catalogSession;
....
}
Quindi puoi utilizzare la sessione del catalogo all'interno della classe in questo modo:
$this->catalogSession->setMyValue('test');
$this->catalogSession->getMyValue();
[EDIT]
Non utilizzare sessioni nei modelli.
È necessario creare wrapper nella classe di blocco che i modelli possono utilizzare per impostare / ottenere valori.
Usando l'esempio sopra, crea i metodi nel blocco
public function setSessionData($key, $value)
{
return $this->catalogSession->setData($key, $value);
}
public function getSessionData($key, $remove = false)
{
return $this->catalogSession->getData($key, $remove);
}
Ma se vuoi davvero usare la sessione nel modello puoi semplicemente creare un wrapper nel tuo blocco per ottenere la sessione:
public function getCatalogSession()
{
return $this->catalogSession;
}
Quindi puoi farlo nel modello:
$this->getCatalogSession()->setMyValue('test');
$this->getCatalogSession()->getMyValue();
unsMyValue
Questi sono tutti tipi di sessione 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
Secondo lo standard di codifica ECGM2 Magento 2, per prima cosa usi la classe di sessione, quindi puoi passarla al costruttore, altrimenti verrà mostrato questo errore
L'oggetto sessione NON DEVE essere richiesto nel costruttore. Può essere passato solo come argomento del metodo.
Ecco come è possibile impostare e ottenere dati in sessione
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;
}
}
Per impostare il valore
$this->getCustomerSession()->setMyValue('YourValue');
Per ottenere valore
$this->getCustomerSession()->getMyValue();
Per valore di sessione non impostato
$this->getCustomerSession()->unsMyValue();