dertechie / datamapping
Der Techie 数据映射库,提供一致的方式来处理数据映射。
dev-master
2020-11-26 19:05 UTC
Requires
- php: ^7.4
This package is auto-updated.
Last update: 2024-09-27 03:32:07 UTC
README
在现代PHP应用程序中,通常需要处理数据映射。许多应用程序在其模型/实体上使用类方法,如fromArray或fromXXX。这对于同一上下文中的内置类型(如数组或对象)可能有效。但一旦有人尝试从上下文之外的对象进行映射,事情就会变得混乱。
这个库提供了一个干净且解耦的方式来处理数据映射。
安装
首选的安装方法是使用Composer。以下命令将添加适当的依赖项到您的composer.json文件中
composer require dertechie/datamapping
使用库
假设我们有一个简单的对象,我们想要映射
<?php namespace DerTechie\Entities; class MyObject { use MappableTrait; private string $id; private string $name; /** * @return string */ public function getId(): string { return $this->id; } /** * @param string $id */ public function setId(string $id): void { $this->id = $id; } /** * @return string */ public function getName(): string { return $this->name; } /** * @param string $name */ public function setName(string $name): void { $this->name = $name; } }
要为此对象启用映射,我们只需将其添加到MappableTrait中。这将为对象添加from方法。
为了映射对象,我们需要一个处理所有映射的Mapper类。
<?php namespace DerTechie\Mappers; use DerTechie\DataMapping\AbstractMapper; use DerTechie\Entities\MyObject; class MyObjectMapper extends AbstractMapper { public static function getType(): string { return MyObject::class; } public function fromArray(array $source): MyObject { $obj = new MyObject(); $obj->setId($source['id']); $obj->setName($source['name']); return $obj; } public function fromCreateMyObjectRequest(CreateMyObjectRequest $request): MyObject { $obj = new MyObject(); $obj->setId($request->input('id')); $obj->setName($request->input('name')); return $obj; } public function getMappings(): array { return [ new Mapping('array', [$this, 'fromArray']), new Mapping(CreateMyObjectRequest::class, [$this, 'fromCreateMyObjectRequest']) ]; } }
这里的关键部分是类方法getType()和方法getMappings()。getType()定义了这个Mapper负责映射到的类型。getMappings()方法期望返回一个可用的映射数组。第一个参数定义了这个映射映射到的类型,第二个参数定义了用于映射的回调函数。
要使用映射器,需要将其注册。为此,只需调用
MapperRegistry::register(MyObjectMapper::class)
现在,您可以使用方便的from方法在您的对象上映射它:MyObject::from(['id' => '1', 'name' => 'Foo']);