Saya sedang menulis modul pembayaran untuk Magento 2 sekarang dan saya sedang mengeceknya terhadap
"Kode Penyandi Program Kualitas Ekstensi Magento" CodeSniffer
( https://github.com/magento/marketplace-eqp ).
Untuk setiap kelas saya yang menggunakan objek sesi (checkout), CodeSniffer merespons dengan peringatan berikut:
Session object MUST NOT be requested in constructor. It can only be passed as a method argument.
Saya mendapatkan objek sesi dengan cara berikut:
/**
* Checkout session object
*
* @var \Magento\Checkout\Model\Session
*/
protected $checkoutSession;
/**
* Constructor
*
* @param \Magento\Checkout\Model\Session $checkoutSession
* @return void
*/
public function __construct(\Magento\Checkout\Model\Session $checkoutSession)
{
$this->checkoutSession = $checkoutSession;
}
Apakah ada cara yang benar untuk mendapatkan objek sesi?
Saya tidak dapat menemukan apa pun dalam kode inti Magento 2.
Saya hanya bisa menemukan kode di mana ia digunakan dengan cara yang persis sama dengan saya menggunakannya.
protected $checkoutSession;
hadapan KonstruktorJawaban:
Magento Docs katakan
Magento 2 Proxy
Jadi, dalam kasus Anda
Catatan \ akhiran proxy untuk objek \ Magento \ Checkout \ Model \ Session
sumber
Seperti yang ditunjukkan oleh peringatan:
Anda harus menggunakan proxy sebagai gantinya.
Anda dapat mengetahui lebih lanjut tentang objek proxy di sini: http://devdocs.magento.com/guides/v2.1/extension-dev-guide/proxies.html
sumber
Sesuai standar pengkodean Magento 2 ECGM2 Anda pertama kali menggunakan kelas sesi maka Anda dapat meneruskannya ke dalam konstuktor jika tidak, kesalahan ini akan ditampilkan
Contoh:
sumber