如何在magento2中实例化模型?


Answers:


28

Magento严格禁止直接使用ObjectManager。它提供了将所有情况抽象出来的服务类。

对于所有非注射剂(模型),您必须使用工厂:

受保护的$ 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;
    ....
}

[一年后编辑]
即使以上答案有效,也不是最佳实践。有关正确的做法,请参阅安东的答案。


出现错误-Magento \ Framework \ ObjectManager类不存在
Anas Mansuri,

5

从技术上讲,如果您具有的实例,则\Magento\Framework\ObjectManager可以调用createget这将为您提供所需的对象。但这确实取决于您要在哪里使用它,因为Magento 2会通过构造函数转向依赖注入

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.