Odpowiedzi:
Magento odradza bezpośrednie korzystanie z ObjectManager. Zapewnia klasy usług, które ją abstrakują dla wszystkich scenariuszy.
W przypadku wszystkich produktów innych niż zastrzyki (modeli) należy użyć fabryki:
chroniony $ pageFactory;
funkcja publiczna __construct (\ Magento \ Cms \ Model \ PageFactory $ pageFactory)
{
$ this-> pageFactory = $ pageFactory;
}
funkcja publiczna someFunc ()
{
...
$ page = $ this-> pageFactory-> create ();
...
}
Wszystko, co musisz zrobić, to zapytać fabrykę o pożądany model w konstruktorze. Zostanie wygenerowany automatycznie po uruchomieniu Magento lub kompilatora.
Możesz to zrobić w następujący sposób:
$model = $this->_objectManager->create('Full\Model\Class\Name\Here');
ale musisz upewnić się, że _objectManagerczłonek istnieje.
W większości klas powinien, ale jeśli nie wstrzyknie go do konstruktora. Lubię to:
protected $_objectManager;
public function __construct(
...,
\Magento\Framework\ObjectManager $objectManager,
....
){
....
$this->_objectManager= $objectManager;
....
}
[edytuj rok później]
Nawet jeśli powyższa odpowiedź zadziała, nie jest to najlepsza praktyka. Dla właściwego sposobu zobacz odpowiedź Antona.
Technicznie, jeśli masz instancję \Magento\Framework\ObjectManagermożna zadzwonić createz geta to daje przedmiot pragnienie. Ale tak naprawdę zależy to od tego, gdzie chcesz tego użyć, ponieważ Magento 2 przesuwa się w kierunku wstrzykiwania zależności za pośrednictwem konstruktora .