Magento 2 में सेट, रिट्रीव और अनसेट सत्र चर कैसे सेट करें?


जवाबों:


20

मुझे इसके लिए 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 \ बैकएंड \ मॉडल \ सत्र
  • \ Magento \ सूची \ मॉडल \ सत्र
  • \ Magento \ चेकआउट \ मॉडल \ सत्र
  • \ Magento \ ग्राहक \ मॉडल \ सत्र
  • \ Magento \ न्यूज़लेटर \ मॉडल \ सत्र

1
अच्छी व्याख्या!
हिम्मत पालीवाल

@ सरफराज, क्या हम नियंत्रक में सत्र निर्धारित कर सकते हैं और हम ब्लॉक फाइल में प्रवेश कर सकते हैं?
जाफर पिंजर

क्या हम पूर्णांक मान सेट कर सकते हैं ?, मैं नीचे त्रुटि प्राप्त कर रहा हूं, वर्ग Magento के ऑब्जेक्ट \\ फ्रेमवर्क \\ सत्र \\ सामान्य \\ इंटरसेप्टर स्ट्रिंग में परिवर्तित नहीं किया जा सकता है
जाफर पिंजर

57

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();

phtml फ़ाइल में सत्र का उपयोग कैसे करें?
राकेश जेसादिया

@RakeshJesadiya। मेरा अपडेट देखें
मेरियस

1
@Bill। मैं नहीं जानता कि
मेरियस

1
@ मेरा मानना ​​है कि आप यह भूल गए कि सत्र चर को कैसे अलग करना है। तो कृपया इसके संबंध में टिप्पणी करें। यह Magento 1.9.xx के समान है या फिर?
भूपेंद्र जडेजा

2
हां। यह 1.9 में पसंद है। का प्रयोग करेंunsMyValue
मेरियस

7

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();

@RobbieAverill यदि आपको अन्य साइटों से कोई समाधान मिला है तो आप यहां StackOverflow पर साझा कर सकते हैं जिसे कॉपी अतीत नहीं कहा जाता है। इसे R & D कहा जाता है। क्या आप समझे?
प्रिंस पटेल

1
यह ठीक है, लेकिन आपको ऐसा करते समय अपने स्रोतों का ध्यान रखना चाहिए
रॉबी एवरिल

1
@ रोबीएवरिल, हाँ आप सही हैं। सुझाव के लिए धन्यवाद। मैंने अपना उत्तर अपडेट कर दिया।
प्रिंस पटेल

मैं एक ग्राहक सत्र का उपयोग करते समय चेतावनी दे रहा हूं "सत्र ऑब्जेक्ट निर्माता में अनुरोध नहीं किया जाना चाहिए। यह केवल एक विधि तर्क के रूप में पारित किया जा सकता है।" इसे कैसे हल करें?
संजय गोहिल '

1
@SanjayGohil मेरा अद्यतन उत्तर जांचें। पहले सत्र सत्र का उपयोग करें और इस त्रुटि से बचने के लिए कंस्ट्रक्टर में पास करें "" निर्माण में अनुरोध नहीं किया जाना चाहिए। इसे केवल एक विधि तर्क के रूप में पारित किया जा सकता है "
प्रिंस पटेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.