当前位置: 技术文章>> magento2二次开发之magento2服务契约-Service contracts

文章标题:magento2二次开发之magento2服务契约-Service contracts
  • 文章分类: 后端
  • 23410 阅读
系统学习magento二次开发,推荐小册:《Magento中文全栈二次开发 》

本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。


服务契约是由模块定义的一组PHP接口。该契约包括数据接口和服务接口。

数据接口的作用是保持数据完整性,而服务接口的作用则是向服务消费者隐藏业务逻辑细节。

数据接口定义了各种功能,如验证、实体信息、搜索相关功能等。它们在单个模块的Api/Data目录中定义。为了更好地理解它的实际含义,让我们来看看Magento_Cms模块的数据接口。在vendor/magento/module-cms/Api/Data/目录中,定义了四个接口,如下所示:

BlockInterface.phpBlockSearchResultsInterface.phpPageInterface.phpPageSearchResultsInterface.php

CMS模块实际上处理两个实体,一个是Block,另一个是Page。查看前面代码中定义的接口,我们可以看到实体本身有单独的数据接口,搜索结果有单独的数字接口。

让我们仔细看看BlockInterface.php file的(剥离的)内容,其定义如下:

namespace Magento\Cms\Api\Data;
interface BlockInterface {
    const BLOCK_ID = 'block_id';
    const IDENTIFIER = 'identifier';
    const TITLE = 'title';
    const CONTENT = 'content';
    const CREATION_TIME = 'creation_time';
    const UPDATE_TIME = 'update_time';
    const IS_ACTIVE = 'is_active';
    public
    function getId();
    public
    function getIdentifier();
    public
    function getTitle();
    public
    function getContent();
    public
    function getCreationTime();
    public
    function getUpdateTime();
    public
    function isActive();
    public
    function setId($id);
    public
    function setIdentifier($identifier);
    public
    function setTitle($title);
    public
    function setContent($content);
    public
    function setCreationTime($creationTime);
    public
    function setUpdateTime($updateTime);
    public
    function setIsActive($isActive);
}

上面的接口定义了实体的所有getter和setter方法,以及表示实体字段名的常量。这些数据接口不包括管理操作,例如删除。这个特定接口的实现可以在vendor/magento/module-cms/Model/Block.php文件中看到,其中使用了这些常量,如下所示(部分):

public function getTitle(){    return $this->getData(self::TITLE);}public function setTitle($title){    return $this->setData(self::TITLE, $title);}

服务接口是包括管理、存储库和元数据接口的接口。这些接口直接在模块的Api目录中定义。回顾Magento Cms模块,其Vendor/Magento/module-cms/Api/目录有两个服务接口,定义如下:

BlockRepositoryInterface.phpPageRepositoryInterface.php

快速查看BlockRepositoryInterface.php的内容可以发现以下(部分)内容:

namespace Magento\Cms\Api;
use Magento\Framework\Api\SearchCriteriaInterface;
interface BlockRepositoryInterface {
    public
    function save(Data\BlockInterface $block);
    public
    function getById($blockId);
    public
    function getList(SearchCriteriaInterface $searchCriteria);
    public
    function delete(Data\BlockInterface $block);
    public
    function deleteById($blockId);
}

在这里,我们看到了用于保存、获取、搜索和删除实体的方法。

这些接口随后通过Web API定义实现,我们将在后面的“Web API”小节中讲解。其目的是定义良好且持久的API,其他模块和第三方集成商可以使用它。


以上就是magento2服务契约相关的内容,快去看看吧。


推荐文章