andreiavrammsd/serializer

此包已被废弃,不再维护。未建议替代包。

JSON字符串转对象。对象/数组转JSON。

v1.0.0 2019-12-28 12:02 UTC

This package is auto-updated.

Last update: 2024-02-29 03:43:44 UTC


README

build

非常基本的序列化/反序列化/toarray。还可以通过类型和/或回调转换数据。

目前只处理JSON。

安装

composer require andreiavrammsd/serializer

用法

$input = '{...}';
$class = ObjectClass::class;

$serializer = Serializer\SerializerBuilder::instance()->build();
// OR
$serializer = Serializer\Factory::create();

$object = $serializer->unserialize($input, $class);

$serializer->serialize($object);

$serializer->toArray($object);

请参阅示例测试

属性注解(所有注解都是可选的)

  • 属性:输入中键的名称。如果未设置,则使用变量名称。
  • 类型:如果设置,则值将按以下方式转换
    • int, float, string, bool, array:将值转换为类型
    • collection:值将被包装在一个可计数的迭代器,具有数组访问功能中。
    • DateTime:创建一个DateTime对象,通过给定的格式格式化值;使用第一个有效的格式。
    • 完全限定类名:值将被解析到给定的类。
    • 类数组:值将被解析到一个数组中,每个元素都解析为给定的类。
    • 类集合:值将被解析到一个集合中,每个元素都解析为给定的类。
  • 回调:接受可调用的(函数或类方法)(带可选参数)。值将被传递给可调用的(带有可选参数,如果设置了),新的值将是可调用的结果。

示例

@Serializer\Property("first_name")

@Serializer\Type("int")
@Serializer\Type("float")
@Serializer\Type("string")
@Serializer\Type("bool")
@Serializer\Type("array")
@Serializer\Type("collection")
@Serializer\Type("DateTime","Y-m-d H:i", "Y-m-d")
@Serializer\Type("Entity\User")
@Serializer\Type("array[Entity\User]")
@Serializer\Type("collection[Entity\User]")

@Serializer\Callback("strtoupper")
@Serializer\Callback("substr", "0", "3")
@Serializer\Callback("[User\NameFormatter, firstName]")
@Serializer\Callback("[User\NameFormatter, lastName]", "1", "3")

@Serializer\IgnoreNull() // Ignores null values when serializing or converting to array.

对象类注解

  • 集合:一个使用Collection注解并扩展了Collection类的类将是一个具有指定类类型项的集合类。

示例

@Serializer\Collection("Entity\User")

开发

  • 要求:Docker, Make
  • 构建和安装开发容器
    • make build PHPVERSION=7.4
    • make install PHPVERSION=7.4
  • 运行QA工具:make PHPVERSION=7.4
  • 在开发容器内工作:make run PHPVERSION=7.4然后make localqa
  • 删除Docker镜像:make clean PHPVERSION=7.4

使用PhpStorm开发

JetBrains