Answers:
Magento严格禁止直接使用ObjectManager。它提供了将所有情况抽象出来的服务类。
对于所有非注射剂(模型),您必须使用工厂:
受保护的$ 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;
....
}
[一年后编辑]
即使以上答案有效,也不是最佳实践。有关正确的做法,请参阅安东的答案。