回答:
Magentoは、ObjectManagerを直接使用することを厳密に推奨していません。すべてのシナリオで抽象化するサービスクラスを提供します。
すべての非注射可能物(モデル)については、factoryを使用する必要があります。
保護された$ pageFactory; パブリック関数__construct(\ Magento \ Cms \ Model \ PageFactory $ pageFactory) { $ this-> pageFactory = $ pageFactory; } パブリック関数someFunc() { ... $ page = $ this-> pageFactory-> create(); ... }
あなたがしなければならないことは、コンストラクタで目的のモデルのファクトリを尋ねることです。Magentoまたはコンパイラを実行すると、自動的に生成されます。
次のようにできます:
$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はコンストラクタを介した依存性注入に移行するため、これをどこで使用したいかによって異なります。