fivepercent / object-mapper
将数组数据映射到对象
v1.0
2015-06-04 10:50 UTC
Requires
- php: >=5.4
- doctrine/annotations: ~1.0
- fivepercent/cache: ~1.0
- fivepercent/exception: ~1.0
- fivepercent/reflection: ~1.0
This package is not auto-updated.
Last update: 2024-09-28 17:43:48 UTC
README
使用此包,您可以映射 array
数据到 object
实例。
安装
在您的 composer.json 中添加 FivePercent/ObjectMapper
{ "require": { "fivepercent/object-mapper": "~1.0" } }
现在运行命令来告诉 composer 下载库
$ php composer.phar update fivepercent/object-mapper
基本用法
在使用 ObjectMapper 之前,您必须配置实例
- 创建一个元数据工厂以从对象加载元数据
- 创建一个策略管理器
use Doctrine\Common\Annotations\AnnotationReader; use FivePercent\Component\ObjectMapper\Strategy\StrategyManager; use FivePercent\Component\ObjectMapper\Metadata\MetadataFactory; use FivePercent\Component\ObjectMapper\Metadata\Loader\AnnotationLoader; use FivePercent\Component\ObjectMapper\ObjectMapper; use FivePercent\Component\ObjectMapper\Metadata\ObjectMetadata; $strategyManager = StrategyManager::createDefault(); $annotationLoader = new AnnotationLoader(new AnnotationReader()); $metadataFactory = new MetadataFactory($annotationLoader); $objectMapper = new ObjectMapper($metadataFactory, $strategyManager); // Or create default object mapper $objectMapper = ObjectMapper::createDefault(); // Used AnnotationLoader for load metadata
注意:目前仅支持注解元数据加载器。
配置并创建实例后,您可以使用 ObjectMapper
的映射功能。
映射示例对象
use FivePercent\Component\ObjectMapper\Annotation\Object; use FivePercent\Component\ObjectMapper\Annotation\Property; /** * @Object() */ class MyClass { /** * @Property() */ public $id; /** * @Property() */ public $name; }
并映射数组数据
$object = new MyClass(); $objectMapper->map($object, [ 'id' => 1, 'name' => 'Foo Bar' ]);
如果您想映射对象中的所有属性,可以为 @Object 设置属性 allProperties,这表示从类中加载所有属性。
use FivePercent\Component\ObjectMapper\Annotation\Object; /** * @Object(allProperties=true) */ class MyClass { public $id; public $name; }
如果数组的键不等于对象的属性名,可以为 @Property 设置属性 fieldName
use FivePercent\Component\ObjectMapper\Annotation\Object; use FivePercent\Component\ObjectMapper\Annotation\Property; /** * @Object() */ class MyClass { /** * @Property() */ public $id; /** * @Property(fieldName="first_name") */ public $firstName; } $object = new MyClass(); $objectMapper->map($object, [ 'id' => 1, 'first_name' => 'Foo Bar' ]);
递归映射
您可以对数据进行递归映射到对象。
使用简单对象
use FivePercent\Component\ObjectMapper\Annotation\Object; use FivePercent\Component\ObjectMapper\Annotation\Property; class MyClass { /** * @DataMapping\Property(class="Tag") */ protected $tag; } /** * @DataMapping\Object(allProperties=true) */ class Tag { protected $name; } $object = new MyClass(); $objectMapper->map($object, [ 'tag' => [ 'name' => 'Foo Bar' ] ]);
使用集合
use FivePercent\Component\ObjectMapper\Annotation\Object; use FivePercent\Component\ObjectMapper\Annotation\Property; class MyClass { /** * @DataMapping\Property(collection=true, class="Tag") */ protected $tag; } /** * @DataMapping\Object(allProperties=true) */ class Tag { protected $name; } $object = new MyClass(); $objectMapper->map($object, [ 'tag' => [ ['name' => 'Foo Bar'], ['name' => 'Bar Foo'] ] ]);
如果需要,您可以设置集合类,将其设置为 collection 属性 ``collection="MyCollectionClass"` 所有键都将保存。