remi-san/serializer

一款通用的、无需配置的PHP序列化工具,适用于所有场景。

v1.2.2 2021-02-21 15:03 UTC

This package is auto-updated.

Last update: 2024-09-21 23:46:22 UTC


README

Author Build Status Quality Score Software License Packagist Version Coverage Status SensioLabsInsight

基于 GeneratedHydrator,它递归序列化,并在生成的数组中添加元数据,以便能够在不知道对象类型的情况下反序列化对象。

安装

Serializer 可在 Packagist 上找到。安装 Serializer 的推荐方式是通过 composer

在命令行运行以下命令

composer require remi-san/serializer=@stable

安装依赖项

composer install

使用方法

$classMapper = new RemiSan\Serializer\Mapper\DefaultMapper(
    new RemiSan\Serializer\NameExtractor\DefaultNameExtractor()
);
$classMapper->register(RemiSan\Serializer\Sample\MySampleClass::class);

$serializer = new RemiSan\Serializer\Serializer(
    $classMapper,
    new RemiSan\Serializer\Hydrator\HydratorFactory(__DIR__ . '/proxies', true),
    new RemiSan\Serializer\Formatter\FlatFormatter(),
    new Doctrine\Instantiator\Instantiator()
);

$object = new MySampleClass(new MySampleClass());
$serialized = $serializer->serialize($object);
$deserialized = $serializer->deserialize($serialized);

命令使用

通过 composer 安装时,还会提供(在 vendor/bin/bin/ 中,具体取决于您的 composer.json)一个 CLI 命令

bin/serializer generate:cache <cache-path> <fully-qualified-class-name>

它将在您提供的路径中写入请求类 hydrator 的缓存版本。

在运行生产环境时(将 HydratorFactorygenerateProxies 选项设置为 `false`),您需要为所有可序列化的类生成 缓存文件

您还需要通过在您的 composer.json 中添加以下内容,让 autoloader 知道您的 hydrators

{
    "autoload": {
        "classmap": [
            "/path/to/cache-dir"
        ]
    }
}

详细信息

要实例化,Serializer 需要一个 SerializableClassMapper、一个 HydratorFactory、一个 DataFormatter 和一个 Instantiator

SerializableClassMapper 用于注册序列化器将能够(反)序列化的类。它需要一个 SerializableClassNameExtractor,该提取器将能够按您想要的方式规范化类的名称。

HydratorFactory 将检索反序列化数据所需的 hydrators。它需要缓存目录的路径以及是否应该在运行时生成代理。

DataFormatter 将提供序列化数组将被格式化的方式(提供的实现允许它将其格式化为两层数组或一个包含 _metadata 键的平面数组)。

Instantiator 将允许根据请求对象的完全限定类名实例化一个对象,而无需构造函数。