系统学习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服务契约相关的内容,快去看看吧。