acelot / automapper
适用于 PHP 8 的强大声明式数据映射器
Requires
- php: ^8.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.13
- nikic/php-parser: ^4.15
- phpunit/phpunit: ^9.0
- respect/validation: ^2
Suggests
- respect/validation: Enables respect-validation integration
This package is auto-updated.
Last update: 2024-09-08 06:32:20 UTC
README
ℹ️ 您正在使用 acelot/automapper
的第二个版本分支。如果您想使用旧版本,请转到 1.x 分支。
AutoMapper 是一个适用于 PHP 8 的强大声明式数据映射器。AutoMapper 可以将数据从任何源数据(通常是数组/对象)映射到现有的数组/对象,或者封装一个新的数组/对象。
💿 安装
composer require acelot/automapper:^2.0
🗿 使用方法
如何从另一个数组封装新的数组?
use Acelot\AutoMapper\Context; use Acelot\AutoMapper\AutoMapper as a; $source = [ 'id' => '99', 'name' => [ 'lastname' => 'Doe', 'firstname' => 'John', ], 'skills' => 'Php, CSS,JS,html, MySql, brainfuck,' ]; $result = a::marshalArray( new Context(), $source, a::toKey('id', a::pipe( a::get('[id]'), a::toInt() )), a::toKey('fullname', a::pipe( a::get('[name]'), a::call(fn($v) => $v['firstname'] . ' ' . $v['lastname']) )), a::toKey('skills', a::pipe( a::get('[skills]'), a::explodeString(','), a::mapIterable(a::pipe( a::trimString(), a::ifEmpty(a::ignore()), a::call('strtolower') )), a::toArray(), a::sortArray() )) ); // Output of `var_export($result)` array( 'id' => 99, 'fullname' => 'John Doe', 'skills' => [ 0 => 'brainfuck', 1 => 'css', 2 => 'html', 3 => 'js', 4 => 'mysql', 5 => 'php', ], )
如何将数据从源映射到现有数组?
显示代码
use Acelot\AutoMapper\Context; use Acelot\AutoMapper\AutoMapper as a; $source = [ 'title' => ' Product title ', 'desc' => [ 'Product short description', 'Product regular description', 'Product descriptive description', ] ]; $target = [ 'id' => 5, 'title' => 'Current title', ]; $result = a::map( new Context(), $source, $target, a::toKey('title', a::pipe( a::get('[title]'), a::trimString() )), a::toKey('description', a::get('[desc][#last]')), ); // Output of `var_export($result)` array ( 'id' => 5, 'title' => 'Product title', 'description' => 'Product descriptive description', )
📌 示例
所有示例都可以在 tests/Functional
目录中找到。
🗄️ 参考
不需要使用具体的类,最好使用 AutoMapper API 的 静态函数。将 AutoMapper 作为短别名导入非常方便,例如 use Acelot\AutoMapper\AutoMapper as a
。
主要功能
AutoMapper 的主要功能。
字段定义
有助于您塑造目标结构的定义。
处理器
核心值处理器。处理器的目的是检索值或修改传入的值,并将其传递给下一个处理器。
助手
助手是建立在另一个处理器之上的处理器。一些助手只是具有特定参数的核心处理器的简写,而另一些则是多个处理器的组合。
🧩 集成
🤨 常见问题解答
什么是上下文?
Context
是一个用于存储任何类型数据的特殊 DTO 类:配置、数据库连接、测试数据等。这个 DTO 被传递给映射器,您可以在处理器中使用您自己的数据。能够处理上下文的处理器以 Ctx
后缀结尾,例如 callCtx
。
如何使用 get
处理器?
您可以使用接受特殊路径字符串的 get
处理器从源获取任何键/属性/方法。该处理器解析提供的路径,将其分解成部分,然后根据路径的部分提取数据。
可用的路径部分
您可以将部分组合起来获取深层次的值
[array_key][array key with spaces][#first][#last]->property->{property with spaces}->someMethod()
如果路径的任何部分找不到,则处理器将返回 NotFoundValue
值。此值会抛出 NotFoundException
,但您可以使用 ifNotFound
助手恢复。
🖋️ 许可证
根据 MIT 许可证授权。版权所有 (c) 2017-至今,Valeriy Protopopov