ম্যাজেন্টো 2 এ সেশন ভেরিয়েবলগুলি কীভাবে সেট, পুনরুদ্ধার এবং আনসেট করবেন?


উত্তর:


20

আমি ম্যাজেন্টো 2 তে এর সমতুল্য উপায়টি পেয়েছি:

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
সুন্দর ব্যাখ্যা!
হিম্মত পালিওয়াল

@ সরফরাজ, আমরা কি নিয়ামক সেশন সেট করতে পারি এবং আমরা ব্লক ফাইলে অ্যাক্সেস করতে পারি?
জাফর পিনজার

আমরা কি পূর্ণসংখ্যা মান নির্ধারণ করতে পারি ?, আমি ত্রুটির নীচে পাচ্ছি, ক্লাসের অবজেক্ট অব ম্যাজেন্টো \\ ফ্রেমওয়ার্ক \\ সেশন \\ জেনেরিক \\ ইন্টারসেপ্টরটিকে স্ট্রিংয়ে রূপান্তর করা যায়নি
জাফর পিনজার

57

ম্যাজেন্টো 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();

পিএইচটিএমএল ফাইলে সেশন কীভাবে ব্যবহার করবেন?
রাকেশ জেসাদিয়া

@RakeshJesadiya। আমার আপডেট দেখুন।
মারিয়াস

1
@বিল. আমি জানি না
মারিয়াস

1
@ মারিয়াস আমি মনে করি আপনি কীভাবে সেশন ভেরিয়েবল আনসেট করবেন তা উল্লেখ করতে ভুলে গেছেন। সুতরাং এটি সম্পর্কে মন্তব্য করুন। এটি কি একই রকম ম্যাজেন্টো 1.9.xx বা অন্য কিছু?
ভূপেন্দ্র জাদেজা

2
হাঁ। এটি 1.9 এর মতো। ব্যবহারunsMyValue
মারিউস

7

এগুলি ম্যাজেন্টো 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

ম্যাজেন্টো 2 ইসিজিএম 2 কোডিং স্ট্যান্ডার্ড অনুসারে আপনি প্রথমে সেশন ক্লাস ব্যবহার করেন তারপর আপনি এটি কনস্ট্রাক্টরে পাস করতে পারেন অন্যথায় এই ত্রুটিটি প্রদর্শিত হবে

সেশন অবজেক্ট কনস্ট্রাক্টরে অনুরোধ করা উচিত নয়। এটি কেবল একটি পদ্ধতি আর্গুমেন্ট হিসাবে পাস করা যেতে পারে।

সেশনে আপনি কীভাবে ডেটা সেট করতে এবং পেতে পারেন তা এখানে

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

@ রবিবিভারিল যদি আপনি অন্য সাইট থেকে কোনও সমাধান খুঁজে পান তবে আপনি স্ট্যাকওভারফ্লোতে এখানে ভাগ করে নিতে পারেন যা কপি অতীত বলা হয় না। একে আরএন্ডডি বলা হয়। তুমি কি বুঝতে পেরেছো?
যুবরাজ প্যাটেল

1
এটি দুর্দান্ত, তবে এমনটি করার সময় আপনার উত্সগুলি
রবি অ্যাভারিল

1
@ রবিবিভারিল, হ্যাঁ আপনি ঠিক বলেছেন। পরামর্শের জন্য তোমাকে ধন্যবাদ। আমি আমার উত্তর আপডেট।
যুবরাজ প্যাটেল

আমি গ্রাহকসেশন ব্যবহার করার সময় সতর্কতা পাচ্ছি "সেশন অবজেক্টটি কনস্ট্রাক্টরে অনুরোধ করা উচিত নয় It এটি কেবল একটি পদ্ধতি আর্গুমেন্ট হিসাবে পাস করা যেতে পারে।" কীভাবে সমাধান করবেন?
সঞ্জয় গোহিল

1
@ সঞ্জয়গোহিল আমার আপডেট হওয়া উত্তরগুলি পরীক্ষা করুন। এই ত্রুটি এড়াতে প্রথম সেশন ক্লাস এবং কনস্ট্রাক্টারে পাস করুন "" সেশন অবজেক্ট কনস্ট্রাক্টরে অনুরোধ করা উচিত নয়। এটি কেবল একটি পদ্ধতির যুক্তি হিসাবেই পাস করা যেতে পারে "
প্রিন্স প্যাটেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.