Risposte:
Magento scoraggia rigorosamente l'uso di ObjectManager direttamente. Fornisce classi di servizio che lo astraggono per tutti gli scenari.
Per tutti i non iniettabili (modelli) è necessario utilizzare la fabbrica:
protetto $ pageFactory; funzione pubblica __construct (\ Magento \ Cms \ Model \ PageFactory $ pageFactory) { $ this-> pageFactory = $ pageFactory; } funzione pubblica someFunc () { ... $ page = $ this-> pageFactory-> create (); ... }
Tutto quello che devi fare è chiedere alla fabbrica il modello desiderato nel costruttore. Verrà generato automaticamente quando esegui Magento o il compilatore.
Puoi farlo in questo modo:
$model = $this->_objectManager->create('Full\Model\Class\Name\Here');
ma devi assicurarti che il _objectManager
membro esista.
Nella maggior parte delle classi dovrebbe, ma se non lo inietta nel costruttore. Come questo:
protected $_objectManager;
public function __construct(
...,
\Magento\Framework\ObjectManager $objectManager,
....
){
....
$this->_objectManager= $objectManager;
....
}
[modifica un anno dopo]
Anche se la risposta sopra funziona, non è la migliore pratica. Per il modo giusto di farlo, vedi la risposta di Anton.
Tecnicamente se si dispone di un'istanza della \Magento\Framework\ObjectManager
è possibile chiamare create
di get
e questo vi darà l'oggetto che desiderate. Ma dipende davvero da dove si desidera utilizzarlo poiché Magento 2 si sposta verso l' iniezione di dipendenza tramite il costruttore .