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 _objectManagermembro 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 createdi gete 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 .