imevul / mapster
Requires
- php: >=5.3.0
Requires (Dev)
- php: >=5.3.0
- doctrine/common: >=2.3.0
Suggests
- doctrine/common: Adds support for Autoboxing values to objects of specified type.
README
Mapster
一个轻量级的PHP数据映射库。轻松将json_decoded结构转换为实际类。
许可证
MIT (https://open-source.org.cn/licenses/MIT)
待办事项
什么都没有!目前我们已经完成了。如果您发现了一个错误或有一个很棒的想法,请务必打开一个问题!
需求和限制
- PHP v5.3+
- 映射的类必须有一个空的构造函数:
__construct()
; array
是一个保留的类名,映射到常规数组。
安装
您可以选择下载代码并包含 Mapster/Mapster.php
文件,或者如果您使用Composer,只需将以下要求添加到您的composer.json文件中
{
"require": {
"imevul/mapster": "dev-default"
}
}
这将把最新的源代码作为依赖项添加到您的项目中,并通过Composer自动加载功能自动加载。如果您想确保您有一个稳定的版本,您可以指定版本号。例如
{
"require": {
"imevul/mapster": ">=1.1.1"
}
}
请查看 标签页面 以获取最新版本。
用法
此库处理手动指定的映射以及从解码数据中生成的“魔法”映射。例如,以下数据将被转换为 Square
{
"__class__": "Square",
"width": 20,
"height": 20
}
对于手动映射,您可以指定以下形式的映射
$map = array(
"__class__" => "Square",
"squareField" => array(
"__class__" => "Triangle",
"triangleField" => array(
"__class__" => "array",
"0" => array(
"__class__" => "Circle",
"circleField" => 3
)
)
)
)
这将映射以下数据
{
"squareField": {
"triangleField": [
{
"circleField": 3
}
]
}
}
到以下结构
new Square {
$squareField = new Triangle() {
$triangleField = array(
new Circle() {
$circleField = 3;
}
)
}
}
要使用映射器,只需包含库文件并运行
$mapper = new Mapster();
$result = $mapper->map($data);
其中 $data
是您希望映射的数组/对象结构。
自动映射器
从版本1.1.0开始,Mapster现在支持所谓的自动映射器。
自动映射器是尝试将某些数据映射到一个或多个类中的自定义类。这对于您无法直接控制数据输入生成方式的情况非常有用,例如使用json_decoded DateTime对象。有关如何编写自己的自动映射器的示例,请参阅包含的DateTime映射器以及自动映射器接口。
如果您不打算使用此功能,请使用配置禁用此功能。
自动装箱
从版本1.1.5开始,您现在可以使用可选的PropertyType注解将实际值自动转换为对象实例。例如
class Entity {
/** @PropertyType("Square") */
public $square;
}
这将使用square的构造函数将值转换为square,如下所示
$entity->square = new Square($entity->square);
您如何使用它取决于您自己。如果项目中需要 doctrine/common
,则默认启用。您还可以通过设置 $config['use_autoboxing'] = FALSE
禁用自动装箱。
最后
如果您发现任何错误或认为适合此项目的想法,请随时打开问题并/或发送拉取请求。
变更日志
2013-06-27 - v1.1.5
- 重构测试并添加PHPCS规则集。
- 添加(可选)基于Doctrine/Common注解的自动装箱支持。
2013-06-20 - v1.1.4
- 修复了有关受保护的和私有属性的错误。
- 重构代码并添加了更多单元测试。
2013-06-20 - v1.1.3
- 更新了文件夹结构,符合psr-0标准。
- 添加了通过Composer的库自动加载。
2013-06-19 - v1.1.2
- 将文件夹结构更改为更常见的格式。
2013-06-19 - v1.1.1
- 添加了Composer支持。
- 更新了安装说明。
2013-06-19 - v1.1.0
- 添加了对自定义自动映射器的支持。包括DateTime映射器。
2013-06-19 - v1.0.0
- 首次发布。已完成完全工作的映射。