Come creare un'istanza di un modello in magento2?


14

C'è un modo di fare qualcosa di semplice come in magento2?

funzione di chiamata come questa in magento 2,

$model = Mage::getModel('cms/page');

domanda non chiara chiarire maggiori dettagli ....
Amit Bera

Risposte:


28

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.


11

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.


ottenuto errore - Classe Magento \ Framework \ ObjectManager non esiste
Anas Mansuri

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.