一个支持灵活文档结构的PHP简单对象序列化器。

2.0.2 2017-05-21 00:35 UTC

This package is not auto-updated.

Last update: 2024-09-28 18:21:22 UTC


README

Build Status SensioLabsInsight

易于使用的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加载。

嵌入资源

与简单关系类似,嵌入资源可用于将另一个资源嵌套在资源树中。嵌入资源可以是CollectionItem,序列化器将尝试序列化所有下级关系。

    /**
     * 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,可以作为您自己的序列化器的基础。