Magento 2'de Oturum Değişkenlerini Ayarlama, Alma ve Ayarlama


33

Magento'da oturum için eşdeğeri nedir 1

Mage::getSingleton('core/session')->setMyValue('test');
Mage::getSingleton('core/session')->unsMyValue();

Magento 2'de aynı mı?

Yanıtlar:


20

Magento2'de buna eşdeğer bir yol buldum:

Mage::getSingleton('core/session')->setMyValue('test');
Mage::getSingleton('core/session')->unsMyValue();

Çekirdek Oturumunda Set / Get / Unset Değeri:

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

Bu şekilde, oturum değerimiz aşağıdaki oturumlarla ilgili değilse, özel değerler ayarlayabiliriz:

  • \ Magento \ arka uç \ Model \ Oturum
  • \ Magento'nın \ Katalog \ Model \ Session
  • \ Magento \ Ödeme \ Model \ Oturum
  • \ Magento'nın \ Müşteri \ Model \ Session
  • \ Magento \ Bülten \ Model \ Oturum

1
Güzel açıklama!
Himmat Paliwal

@Sarfaraz, denetleyicide oturum ayarlayabilir miyiz ve blok dosyasına erişebilir miyiz?
Jafar Pinjar

Biz set tamsayı değeri ?, i hata altına alıyorum, sınıf Magento \\ Çerçeve \\ Oturum \\ Jenerik \\ Interceptor Nesne dizeye dönüştürülemedi olabilir
jafar pinjar

57

Magento 2'de artık yok core/session.
Bu olanlar da var (diğerleri de olabilir):

  • \Magento\Backend\Model\Session
  • \Magento\Catalog\Model\Session
  • \Magento\Checkout\Model\Session
  • \Magento\Customer\Model\Session
  • \Magento\Newsletter\Model\Session

Bloğunuzda veya kontrol cihazınızda ya da her neyse ihtiyacınız olan oturum için bir bağımlılık yaratmanız gerekir.
Örneğin alalım \Magento\Catalog\Model\Session.

protected $catalogSession;
public function __construct(
    ....
    \Magento\Catalog\Model\Session $catalogSession, 
    ....
){
    ....
    $this->catalogSession = $catalogSession;
    ....
}

Daha sonra aşağıdaki gibi sınıf içindeki katalog oturumunu kullanabilirsiniz:

$this->catalogSession->setMyValue('test');
$this->catalogSession->getMyValue();

[EDIT]
Oturumlarda şablon kullanmamalısınız.
Blok sınıfında, değerleri ayarlamak / almak için şablonların kullanabileceği sarmalayıcılar oluşturmalısınız.

Yukarıdaki örneği kullanarak, blokta yöntemleri oluşturun

public function setSessionData($key, $value)
{
    return $this->catalogSession->setData($key, $value);
}

public function getSessionData($key, $remove = false)
{
    return $this->catalogSession->getData($key, $remove);
}

Ancak oturumu şablonda kullanmak istiyorsanız, oturumu almak için bloğunuzda bir sarmalayıcı oluşturabilirsiniz:

public function getCatalogSession()
{
    return $this->catalogSession;
}

Sonra bunu şablonda yapabilirsiniz:

$this->getCatalogSession()->setMyValue('test');
$this->getCatalogSession()->getMyValue();

phtml dosyasında oturum nasıl kullanılır?
Rakesh Jesadiya

@RakeshJesadiya. Güncellememe bak.
Marius

1
@Bill. Bilmiyorum
Marius

1
@ Marius, oturum değişkenini nasıl ayarlayacağınızı söylemeyi unuttuğunuzu düşünüyorum. Lütfen bununla ilgili yorum yapın. Magento 1.9.xx ile benzer midir?
Bhupendra Jadeja

2
Evet. 1.9'daki gibi. KullanınunsMyValue
Marius

7

Bunların hepsi Magento 2'deki oturum tipleri

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 kodlama standardına göre, ilk önce oturum sınıfını kullanırsınız, sonra bunu yapıcıya geçirebilirsiniz, aksi takdirde bu hata gösterilecektir.

Yapımcıda oturum nesnesi istenmemelidir. Sadece bir metod argümanı olarak geçilebilir.

Oturumu nasıl ayarlayabileceğiniz ve veri alabileceğiniz

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;
    }
}

Değer ayarlamak

$this->getCustomerSession()->setMyValue('YourValue');

Değer almak

$this->getCustomerSession()->getMyValue();

Ayarlanmamış oturum değeri için

$this->getCustomerSession()->unsMyValue();

@RobbieAverill Başka sitelerden bir çözüm bulduysanız, burada kopya geçmişi olarak adlandırılmayan StackOverflow'ta paylaşabilirsiniz. Ar-Ge denir. Anlıyor musun?
Prens Patel,

1
Sorun değil, ancak kaynaklarınızı bunu yaparken
nitelemeniz

1
@RobbieAverill, Evet haklısınız. Öneriniz için teşekkür ederim. Cevabımı güncelledim.
Prens Patel,

CustomerSession kullanırken uyarı alıyorum "Session nesnesi yapıcıda istenmemelidir. Yalnızca bir yöntem argümanı olarak geçirilebilir." Nasıl çözeceksin ?
Sanjay Gohil

1
@SanjayGohil güncellenmiş cevabımı kontrol et. önce oturum sınıfını kullanın ve bu hatayı önlemek için yapıcıya geçin "" Oturum nesnesi yapıcıda istenmemelidir. Sadece bir yöntem argümanı olarak geçilebilir "
Prens Patel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.