remi-san / serializer
一款通用的、无需配置的PHP序列化工具,适用于所有场景。
Requires
- php: >=5.5
- doctrine/instantiator: ^1.0
- ocramius/generated-hydrator: ^1.2|^2.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^1.10
- league/event: ^2.1
- league/tactician: ^1.0
- mockery/mockery: ^0.9
- phpunit/phpunit: ^4.5
- squizlabs/php_codesniffer: ~2.0
- symfony/console: ^2.7|^3.0
Suggests
- league/event: Allows to deal with event within your application.
- league/tactician: Allows to deal with command within your application.
- symfony/console: To use the console module to generate proxies
README
基于 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 的缓存版本。
在运行生产环境时(将 HydratorFactory
的 generateProxies
选项设置为 `false`),您需要为所有可序列化的类生成 缓存文件。
您还需要通过在您的 composer.json
中添加以下内容,让 autoloader 知道您的 hydrators
{ "autoload": { "classmap": [ "/path/to/cache-dir" ] } }
详细信息
要实例化,Serializer
需要一个 SerializableClassMapper
、一个 HydratorFactory
、一个 DataFormatter
和一个 Instantiator
。
SerializableClassMapper
用于注册序列化器将能够(反)序列化的类。它需要一个 SerializableClassNameExtractor
,该提取器将能够按您想要的方式规范化类的名称。
HydratorFactory
将检索反序列化数据所需的 hydrators。它需要缓存目录的路径以及是否应该在运行时生成代理。
DataFormatter
将提供序列化数组将被格式化的方式(提供的实现允许它将其格式化为两层数组或一个包含 _metadata
键的平面数组)。
Instantiator
将允许根据请求对象的完全限定类名实例化一个对象,而无需构造函数。