質問

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

呼び出し機能Magento 2、

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

役に立ちましたか?

解決

Magentoは、ObjectManagerの使用を直接厳しくします。それはすべてのシナリオのためにそれを抽象化するサービスクラスを提供します。

すべての非注射可能な(モデル)ファクトリ:を使用する必要があります

protected $pageFactory;

public function __construct(\Magento\Cms\Model\PageFactory $pageFactory)
{
    $this->pageFactory = $pageFactory;
}

public function someFunc()
{
    ...
    $page = $this->pageFactory->create();
    ...
}
.

あなたがしなければならないのは、コンストラクタの希望モデルの工場に尋ねることです。MagentoまたはCompilerを実行すると自動的に生成されます。

他のヒント

このようにすることができます:

$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のインスタンスがある場合、creategetを呼び出すことができ、これによりあなたが望むオブジェクトが与えられます。しかし、それはMagento 2に向かってどちらを使いたい場所に依存しています。を介して

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top