Quel est l'équivalent pour une session dans Magento 1
Mage::getSingleton('core/session')->setMyValue('test');
Mage::getSingleton('core/session')->unsMyValue();
Pareil dans Magento 2?
Quel est l'équivalent pour une session dans Magento 1
Mage::getSingleton('core/session')->setMyValue('test');
Mage::getSingleton('core/session')->unsMyValue();
Pareil dans Magento 2?
Réponses:
J'ai trouvé le moyen équivalent pour cela dans Magento2:
Mage::getSingleton('core/session')->setMyValue('test');
Mage::getSingleton('core/session')->unsMyValue();
Définir / Obtenir / Annuler la valeur dans la session 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();
}
De cette manière, nous pouvons définir des valeurs personnalisées si notre valeur de session n'est pas liée aux sessions ci-dessous:
Dans magento 2, il n'y en a plus core/session
.
Il y en a cependant (peut-être d'autres aussi):
\Magento\Backend\Model\Session
\Magento\Catalog\Model\Session
\Magento\Checkout\Model\Session
\Magento\Customer\Model\Session
\Magento\Newsletter\Model\Session
Vous devez créer une dépendance pour la session dont vous avez besoin dans votre bloc, votre contrôleur ou autre.
Prenons par exemple \Magento\Catalog\Model\Session
.
protected $catalogSession;
public function __construct(
....
\Magento\Catalog\Model\Session $catalogSession,
....
){
....
$this->catalogSession = $catalogSession;
....
}
Vous pouvez ensuite utiliser la session de catalogue dans la classe comme ceci:
$this->catalogSession->setMyValue('test');
$this->catalogSession->getMyValue();
[EDIT]
Vous ne devriez pas utiliser de sessions dans des modèles.
Vous devez créer des wrappers dans la classe de bloc que les modèles peuvent utiliser pour définir / obtenir des valeurs.
En utilisant l'exemple ci-dessus, créez les méthodes dans le bloc
public function setSessionData($key, $value)
{
return $this->catalogSession->setData($key, $value);
}
public function getSessionData($key, $remove = false)
{
return $this->catalogSession->getData($key, $remove);
}
Mais si vous voulez vraiment utiliser la session dans le modèle, vous pouvez simplement créer un wrapper dans votre bloc pour obtenir la session:
public function getCatalogSession()
{
return $this->catalogSession;
}
Ensuite, vous pouvez le faire dans le modèle:
$this->getCatalogSession()->setMyValue('test');
$this->getCatalogSession()->getMyValue();
unsMyValue
Ce sont tous les types de session dans 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
Conformément à la norme de codage Magento 2 ECGM2, vous utilisez d’abord la classe de session, puis vous pouvez la transmettre au constructeur, sinon cette erreur sera affichée.
L'objet de session NE DOIT PAS être demandé dans le constructeur. Il ne peut être passé que comme argument de méthode.
Voici comment vous pouvez définir et obtenir des données en session
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;
}
}
Pour définir la valeur
$this->getCustomerSession()->setMyValue('YourValue');
Pour obtenir de la valeur
$this->getCustomerSession()->getMyValue();
Pour la valeur de session non définie
$this->getCustomerSession()->unsMyValue();