Bagaimana instantiate model di magento2?


14

Apakah ada cara melakukan sesuatu yang sederhana seperti di magento2?

memanggil fungsi seperti ini di magento 2,

$model = Mage::getModel('cms/page');

pertanyaan tidak jelas letakkan lebih detail ....
Amit Bera

Jawaban:


28

Magento secara ketat mengecilkan penggunaan ObjectManager secara langsung. Ini menyediakan kelas layanan yang abstrak untuk semua skenario.

Untuk semua non-injeksi (model) Anda harus menggunakan pabrik:

$ pageFactory dilindungi;

fungsi publik __construct (\ Magento \ Cms \ Model \ PageFactory $ pageFactory)
{
    $ this-> pageFactory = $ pageFactory;
}

fungsi publik someFunc ()
{
    ...
    $ page = $ this-> pageFactory-> create ();
    ...
}

Yang harus Anda lakukan adalah meminta pabrik model yang diinginkan dalam konstruktor. Ini akan secara otomatis dihasilkan ketika Anda menjalankan Magento atau kompiler.


11

Anda bisa melakukannya seperti ini:

$model = $this->_objectManager->create('Full\Model\Class\Name\Here');

tetapi Anda harus memastikan bahwa _objectManageranggota itu ada.

Di sebagian besar kelas seharusnya, tetapi jika tidak menyuntikkannya di konstruktor. Seperti ini:

protected $_objectManager;
public function __construct(
   ...,
   \Magento\Framework\ObjectManager $objectManager,
   ....
){
    ....
    $this->_objectManager= $objectManager;
    ....
}

[sunting satu tahun kemudian]
Bahkan jika jawaban di atas berfungsi, itu bukan praktik terbaik. Untuk cara yang benar melakukannya lihat jawaban Anton.


mendapat kesalahan - Kelas Magento \ Framework \ ObjectManager tidak ada
Anas Mansuri

5

Secara teknis jika Anda memiliki sebuah instance dari \Magento\Framework\ObjectManagerAnda dapat memanggil createdari getdan ini akan memberikan objek yang Anda inginkan. Tapi itu benar-benar tergantung pada di mana Anda ingin menggunakan ini karena Magento 2 bergeser ke injeksi ketergantungan melalui konstruktor .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.