Magento2 中的模型

Magento2 中的模型

在Magento 2框架中,模型是CRUD操作必须具备的组件之一。在本课程中,我们将学习什么是模型,模型的功能以及如何创建模型以及如何在自定义的Magento 2扩展中使用它。

课程概述

在本课程中,我们将学习以下内容:

  • 什么是模型?
  • 模型能力
  • 如何创建模型并在Magento 2中使用它?

Magento2 中的模型是什么?

模型是一个类,代表数据库中的实体或记录。该模型还提供对在Magento 2应用程序中使用的实体数据的访问。模型术语来自模型-视图-控制器设计模式,是在Magento 2中需要理解的重要组件。

为了创建模型,PHP类应该扩展来自Magento 2框架的AbstractModel类。模型类继承了AbstractModel类提供的方法和逻辑。

让我们看一下名为User的PHP类。用户类扩展了AbstractModel类,可以称为模型。

use Magento\Framework\Model\AbstractModel;

class User extends AbstractModel
{    

}

为了使用新创建的用户模型,我们必须创建一个新的用户实例。User Factory类创建一个User实例,setData方法允许将“ Max”的值设置为键的名字。用户对象存储了这些数据,可以使用getData方法对其进行访问。

class Controller
{    
    // ...
    public function execute()
    {
         $user = $this->userFactory->create();
         $user->setData(‘first_name’, ‘Max’);

         $firstName = $user->getData(‘first_name’);
    }
}

如您所见,我们不使用“ new”运算符来创建User对象。这是因为每个模型都将依赖项注入到构造方法中,借助在Magento 2中实现的控制反转,我们可以自动注入依赖项。

对于要创建的用户对象,我们可以使用UserFactory类,该类由Magento 2框架在构造方法中请求时自动生成。

use MageMastery\ModelExample\Model\User;
use MageMastery\ModelExample\Model\UserFactory;

class Controller {   
    private $userFactory;

    public function __construct(UserFactory $userFactory)
    {
         $this->userFactory = $userFactory;
    }
    // ...
}

User Factory类也称为具有单个create方法的Model Factory类。自动生成的User Factory类的唯一责任是创建User类的新实例。

资源模型关系

模型通常代表存储在数据库中的业务实体。为了使模型正常工作,必须在_construct()方法内部提供所谓的资源模型类关系。

use Magento\Framework\Model\AbstractModel;

class User extends AbstractModel
{    
     protected function _construct()
     {
          $this->_init(ResourceClassName::class);
     }
}

不要与__construct()公共方法混淆。因为这是带有单个下划线的受保护方法。在此方法内部,应使用资源模型类的名称调用_init方法。我们将在下一期“法师精通”课程中讨论资源模型。

可选的模型接口

模型可以有选择地实现接口,以简化和使用,或提供其他功能。如果模型需要具有缓存功能,那么可以添加IdentityInterface接口,也就是说,每次保存或删除模型时,都会清除该模型的缓存。

或者,我们可以创建一个数据接口并提供公共方法以能够依赖接口而不是具体的实现。

模型代码位置

模型通常位于Magento 2扩展的Model目录中。

重要

当需要从数据库检索数据并将其呈现在Magento 2应用程序中时,应使用模型。模型类表示Magento 2扩展的域模型。

AbstractModel类已弃用CRUD和其他方法。不应该使用这些方法。

模型通常与资源模型类一起使用。这是知道如何在数据库中加载和存储数据的类。我们的下一个Mage Mastery课程将学习有关资源模型的更多信息。