Jawaban:
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.
Anda bisa melakukannya seperti ini:
$model = $this->_objectManager->create('Full\Model\Class\Name\Here');
tetapi Anda harus memastikan bahwa _objectManager
anggota 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.
Secara teknis jika Anda memiliki sebuah instance dari \Magento\Framework\ObjectManager
Anda dapat memanggil create
dari get
dan 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 .