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 _objectManager
czł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\ObjectManager
można zadzwonić create
z get
a 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 .