pfazzi/simplex-mapper
Composer 安装命令:
composer require pfazzi/simplex-mapper
包简介
A simple mapping library
README 文档
README
A simple PHP library to transfer data from a source (object or array) to an object.
$dbData = [ 'username' => 'pfazzi', 'emailAddress' => 'pfazzi@test.com', 'isEnabled' => '1', ]; $mapper = new \Pfazzi\SimplexMapper\Mapper(); $user = $mapper->map( source: $dbData, target: User::class, );
Are you looking for an easy way to convert an array to an object?
Do you want to map a DTO to a domain object?
Do you want to hydrate an object from an array?
Use SimplexMapper!
Features
- Easy to use
- Zero configuration
- Zero dependencies
- Supports PHP 8 union types
- Supports nested objects
- Uses reflection, no need to modify your objects
Installation
Install SimplexMapper with composer
composer require pfazzi/simplex-mapper
Usage
Map
Maps the source data to a new instance of the target class
$mapper = new \Pfazzi\SimplexMapper\Mapper(); // From Array $userEntity = $mapper->map(source: ['name' => 'patrick'], target: UserEntity::class); // From stdClass $rawData = new \stdClass(); $rawData->name = 'Patrick'; $userEntity = $mapper->map(source: $rawData, target: UserEntity::class); // From anonymous class $rawData = new class { public function __construct(private string $name = 'Patrick') {} }; $userEntity = $mapper->map(source: $rawData, target: UserEntity::class); // From object $rawData = new UserDto('Patrick'); $userEntity = $mapper->map(source: $rawData, target: UserEntity::class);
Hydrate
Hydrates an object instance with data from the source:
$mapper = new \Pfazzi\SimplexMapper\Mapper(); $userEntity = $entityManager->find(UserEntity::class, 1); // From Array $mapper->hydrate(source: ['name' => 'patrick'], target: $userEntity); // From stdClass $rawData = new \stdClass(); $rawData->name = 'Patrick'; $mapper->map(source: $rawData, target: $userEntity); // From anonymous class $rawData = new class { public function __construct(private string $name = 'Patrick') {} }; $mapper->map(source: $rawData, target: $userEntity); // From object $rawData = new UserDto('Patrick'); $mapper->map(source: $rawData, target: $userEntity);
Use Cases
Map database data to read models
You want to read data from supplier table using Doctrine DBAL Connection and instantiate a Supplier read model:
class Supplier { public function __construct( public int $id, public string $taxId, public bool $onConsignment, ) { } } $result = $connection->executeQuery(<<<'SQL' SELECT supplier.id, supplier.tax_id AS taxId, supplier.is_enabled AS isEnabled FROM supplier WHERE supplier.tax_id = :taxId SQL, ['taxId' => $taxId]); $data = $result->fetchAssociative();
Without SimplexMapper you have to write mapping code, such as:
$readModel = new Supplier( (int) $data['id'], $data['taxId'], '1' == $data['isEnabled'], );
With SimplexMapper all you need to write is just the following line:
$readModel = $this->mapper->map($data, Supplier::class);
pfazzi/simplex-mapper 适用场景与选型建议
pfazzi/simplex-mapper 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 3.93k 次下载、GitHub Stars 达 4, 最近一次更新时间为 2022 年 01 月 04 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 pfazzi/simplex-mapper 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 pfazzi/simplex-mapper 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 3.93k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 4
- 点击次数: 2
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2022-01-04