magento2でモデルをインスタンス化する方法は?


14

magento2のように簡単なことを行う方法はありますか?

magento 2でこのような関数を呼び出す

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

質問....明らかプットの詳細ではありません
アミットベラ

回答:


28

Magentoは、ObjectManagerを直接使用することを厳密に推奨していません。すべてのシナリオで抽象化するサービスクラスを提供します。

すべての非注射可能物(モデル)については、factoryを使用する必要があります。

保護された$ pageFactory;

パブリック関数__construct(\ Magento \ Cms \ Model \ PageFactory $ pageFactory)
{
    $ this-> pageFactory = $ pageFactory;
}

パブリック関数someFunc()
{
    ...
    $ page = $ this-> pageFactory-> create();
    ...
}

あなたがしなければならないことは、コンストラクタで目的のモデルのファクトリを尋ねることです。Magentoまたはコンパイラを実行すると、自動的に生成されます。


11

次のようにできます:

$model = $this->_objectManager->create('Full\Model\Class\Name\Here');

ただし、_objectManagerメンバーが存在することを確認する必要があります。

ほとんどのクラスでそうすべきですが、コンストラクターに注入しない場合。このような:

protected $_objectManager;
public function __construct(
   ...,
   \Magento\Framework\ObjectManager $objectManager,
   ....
){
    ....
    $this->_objectManager= $objectManager;
    ....
}

[1年後編集]
上記の答えがうまくいくとしても、それはベストプラクティスではありません。正しい方法については、アントンの答えをご覧ください。


得エラー-クラスMagentoの\ Frameworkの\のObjectManagerが存在しない
アナスMansuri

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.