Magento2でモデルをインスタンス化する方法
質問
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
のインスタンスがある場合、create
のget
を呼び出すことができ、これによりあなたが望むオブジェクトが与えられます。しかし、それはMagento 2に向かってどちらを使いたい場所に依存しています。を介して
所属していません magento.stackexchange