Come istanziare un modello in Magento2?
Domanda
C'è un modo per fare qualcosa di semplice come in Magento2?
Call Funzione come questa in Magento 2,
$model = Mage::getModel('cms/page');
. Soluzione
Magento scoraggia rigorosamente l'uso di ObjectManager direttamente.Fornisce classi di servizio che astratte a tutti gli scenari.
Per tutti i non iniettabili (modelli) è necessario utilizzare la fabbrica:
protected $pageFactory; public function __construct(\Magento\Cms\Model\PageFactory $pageFactory) { $this->pageFactory = $pageFactory; } public function someFunc() { ... $page = $this->pageFactory->create(); ... }.
Tutto quello che devi fare è chiedere la fabbrica del modello desiderato nel costruttore.Verrà generato automaticamente quando si esegue magento o compilatore.
Altri suggerimenti
Puoi farlo come questo:
$model = $this->_objectManager->create('Full\Model\Class\Name\Here');
.
Ma devi assicurarti che esista il membro _objectManager
.
Nella maggior parte delle classi dovrebbe, ma se non lo inietta nel costruttore.In questo modo:
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 giusto modo di farlo vedere la risposta di Anton.
Tecnicamente Se si dispone di un'istanza del \Magento\Framework\ObjectManager
è possibile chiamare create
di get
e questo ti darà l'oggetto che desideri.Ma dipende davvero da dove vuoi usarlo questo per come Magento 2 spostamenti verso Iniezione di dipendenzavia costruttore .