zingle-com/dto

简单的DTOs

1.0.0 2019-09-19 21:26 UTC

This package is auto-updated.

Last update: 2024-09-20 09:21:36 UTC


README

Build Status Coverage Status

这是一个用于创建和序列化DTO树的简单库。

为什么?

将对象序列化为数组以传输,然后再将其作为其他类型的数据进行传输是一个痛苦的过程。这个库使您能够轻松创建装饰对象并描述其序列化行为的对象。解析器将遍历树进行序列化,因此最终结果是普通的数组。然后,您可以将其传递到任何您想要在此点将其序列化为其他格式的程序。

示例

use ZingleCom\DTO\Resolver;
use ZingleCom\DTO\Transmittable;
use Acme\SomeModel;

// Imagine that SomeModel has exposed getters on properties we'd like to serialize
class SomeModelDTO implements Transmittable
{
    /**
     * @var SomeModel
     */
    private $someModel;
    
    /**
     * @param SomeModel $someModel
     */
    public function __construct(SomeModel $someModel)
    {
        $this->someModel = $someModel;
    }
    
    public function toArray(): array
    {
        return [
            'id' => $this->someModel->getId(),
            'name' => $this->someModel->getName(),
            // imagine we have a related dto and model too
            'relatedModel' => new RelatedModelDTO('id' => $this->someModel->getRelatedModel()),
        ];
    }
}

// ... later you can do 
// imagine $someModel is instantiated somewhere else
$resolver = new Resolver();
$data = $resolver->resolve(new SomeModelDTO($someModel)); 

// $data is now an array as described in DTOs, now we can serialize to whatever
$json = json_encode($data); // JSON for instance

贡献

Fork 仓库并针对 master 分支创建一个 PR。我们会查看的。