bobbysciacchitano / manuel
一个支持灵活文档结构的PHP简单对象序列化器。
2.0.2
2017-05-21 00:35 UTC
Requires (Dev)
- phpunit/phpunit: ~4.0
This package is not auto-updated.
Last update: 2024-09-28 18:21:22 UTC
README
易于使用的PHP序列化器。因为翻译不应该是一件苦差事。
如何使用
要序列化一个对象,首先需要创建一个转换器。转换器必须实现转换方法并返回一个数组。转换器可以接受任何需要序列化的数据或对象类型。
<?php namespace App\Transformer; use TheObject; use Manuel\Transformer\TransformerAbstract; class MyTransformer extends TransformerAbstract { /** * @var string */ protected $type = 'customer'; /** * Transform object properties. * * @param TheObject $myObject * @return array */ public function transform(TheObject $myObject) { return array( 'id' => (int) $myObject->id, 'name' => $myObject->name, 'email' => $myObject->email, 'active' => (bool) $myObject->is_active ); } /** * Define other resources to be included in transformation. * * @param TheObject $myObject */ public function resources(TheObject $myObject) { $this->addLink("/customer/{$myObject->id}/tasks"); $this->addRelationship('organisation', $myObject->organisation_id); } }
要将数据序列化到资源中,可以将数据包装在一个Resource对象中。将数据包装在Resource中告诉Manuel您是想返回一个集合还是一个单一资源。您也可以声明自己的资源类型。
<?php use Manuel\Manager; use Manuel\Resource; use App\Transformer; $manager = new Manager(new JsonAPISerializer); // Serialize a object $translated = $manager->translate(new Resource\Item($data, new Transfomer\MyTransformer)); // Serialize an array or collection of objects $translated = $manager->translate(new Resource\Collection($array, new Transfomer\MyTransformer));
上面的转换器与Json API序列化器将生成以下表示
{ "data": { "id": 1, "type": "customer", "attributes": { "name": "Johnny", "email": "johnny@test.com", "active": true }, "relationships": { "organisation": { "data": { "id": 5, "type": "organisation" } }, "tasks": { "links": { "related": "/customer/1/tasks" } } } } }
关联
Manuel可以处理多种关联类型。将关系转换为正确格式的责任在于序列化器。
简单关系
简单关系可用于构建附加数据或返回简单值。当与JsonAPI序列化器一起使用时,此类资源关系可用于声明对未嵌入或未加载的资源的引用。
链接资源
与简单关系类似,此类资源可用于创建指向其他资源的链接引用,这些资源可以从API加载。
嵌入资源
与简单关系类似,嵌入资源可用于将另一个资源嵌套在资源树中。嵌入资源可以是Collection
或Item
,序列化器将尝试序列化所有下级关系。
/** * Define other resources to be included in transformation. * * @param TheObject $myObject */ public function resources(TheObject $myObject) { $this->addResource('test_item', new Item($data->item, new Transformer)); $this->addResource('test_collection', new Collection($data->items, new Transformer)); }
侧加载资源
此类资源将与主资源一起包含,并且可以加载资源标识符的引用作为关系序列化的一部分。
/** * Define other resources to be included in transformation. * * @param TheObject $myObject */ public function resources(TheObject $myObject) { $this->addResource('test_item', new Item($data->item, new Transformer), true); $this->addResource('test_collection', new Collection($data->items, new Transformer), true); }
序列化器
Manuel自带了一个基本的JsonAPI序列化器实现。抽象序列化器包含一个灵活的API,可以作为您自己的序列化器的基础。