Domanda

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

Call Funzione come questa in Magento 2,

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

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top