마 젠토 1의 세션에 해당하는 것은 무엇입니까 1
Mage::getSingleton('core/session')->setMyValue('test');
Mage::getSingleton('core/session')->unsMyValue();
마 젠토 2에서도 마찬가지입니까?
마 젠토 1의 세션에 해당하는 것은 무엇입니까 1
Mage::getSingleton('core/session')->setMyValue('test');
Mage::getSingleton('core/session')->unsMyValue();
마 젠토 2에서도 마찬가지입니까?
답변:
Magento2에서 이와 동등한 방법을 찾았습니다.
Mage::getSingleton('core/session')->setMyValue('test');
Mage::getSingleton('core/session')->unsMyValue();
핵심 세션에서 값 설정 / 가져 오기 / 설정 해제 :
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();
}
이런 식으로 세션 값이 아래 세션과 관련이없는 경우 사용자 정의 값을 설정할 수 있습니다.
magento 2에는 더 이상 없습니다 core/session
.
그러나 이러한 것들이 있습니다 (다른 것들도있을 수 있음).
\Magento\Backend\Model\Session
\Magento\Catalog\Model\Session
\Magento\Checkout\Model\Session
\Magento\Customer\Model\Session
\Magento\Newsletter\Model\Session
블록이나 컨트롤러 등에서 필요한 세션에 대한 종속성을 만들어야합니다.
예를 들어 봅시다 \Magento\Catalog\Model\Session
.
protected $catalogSession;
public function __construct(
....
\Magento\Catalog\Model\Session $catalogSession,
....
){
....
$this->catalogSession = $catalogSession;
....
}
그런 다음 클래스 내에서 카탈로그 세션을 다음과 같이 사용할 수 있습니다.
$this->catalogSession->setMyValue('test');
$this->catalogSession->getMyValue();
[편집]
템플릿에서 세션을 사용해서는 안됩니다.
블록 클래스에서 값을 설정 / 얻기 위해 템플릿이 사용할 수있는 래퍼를 만들어야합니다.
위의 예를 사용하여 블록에서 메소드를 작성하십시오.
public function setSessionData($key, $value)
{
return $this->catalogSession->setData($key, $value);
}
public function getSessionData($key, $remove = false)
{
return $this->catalogSession->getData($key, $remove);
}
그러나 템플릿에서 세션을 실제로 사용하려면 블록에 세션을 얻기 위해 래퍼를 만들 수 있습니다.
public function getCatalogSession()
{
return $this->catalogSession;
}
그런 다음 템플릿에서이 작업을 수행 할 수 있습니다.
$this->getCatalogSession()->setMyValue('test');
$this->getCatalogSession()->getMyValue();
unsMyValue
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
Magento 2 ECGM2 코딩 표준에 따라 먼저 세션 클래스를 사용하고 생성자에 전달할 수 있습니다. 그렇지 않으면이 오류가 표시됩니다.
생성자에서 세션 객체를 요청해서는 안됩니다. 메소드 인수로만 전달 될 수 있습니다.
세션에서 데이터를 설정하고 얻는 방법은 다음과 같습니다.
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;
}
}
값을 설정하려면
$this->getCustomerSession()->setMyValue('YourValue');
가치를 얻으려면
$this->getCustomerSession()->getMyValue();
설정되지 않은 세션 값
$this->getCustomerSession()->unsMyValue();