Yanıtlar:
Magento, ObjectManager'ın kullanımını doğrudan engeller. Tüm senaryolar için onu soyutlayan hizmet sınıfları sağlar.
Enjekte edilemeyen tüm modeller (modeller) için fabrika kullanmanız gerekir:
korumalı $ pageFactory; public function __construct (\ Magento \ Cms \ Model \ PageFactory $ pageFactory) { $ this-> pageFactory = $ pageFactory; } genel işlev someFunc () { ... $ page = $ this-> pageFactory-> create (); ... }
Yapmanız gereken tek şey yapıcıda istenilen modelin fabrikaya sormaktır. Magento veya derleyiciyi çalıştırdığınızda otomatik olarak oluşturulur.
Bunu şöyle yapabilirsiniz:
$model = $this->_objectManager->create('Full\Model\Class\Name\Here');
ancak _objectManager
üyenin var olduğundan emin olmalısınız .
Sınıfların çoğunda yapmalı, ancak yapıcıya enjekte etmiyorsa. Bunun gibi:
protected $_objectManager;
public function __construct(
...,
\Magento\Framework\ObjectManager $objectManager,
....
){
....
$this->_objectManager= $objectManager;
....
}
[bir yıl sonra düzenleyin]
Yukarıdaki cevap işe yarar olsa bile, bu en iyi uygulama değildir. Bunu yapmanın doğru yolu için Anton'un cevabına bakınız.
Eğer bir örneğini var Teknik olarak ise \Magento\Framework\ObjectManager
Arayabileceğin create
ait get
ve bu size arzu nesnesi verecektir. Ancak bu, Magento 2'nin yapıcı yoluyla bağımlılık enjeksiyonuna doğru kayması nedeniyle bunu nerede kullanmak istediğinize bağlıdır .