jojo1981 / jms-serializer-handlers
JMS Serializer 的处理器
6.0.0
2023-02-06 09:46 UTC
Requires
- php: ^8.0
- ext-dom: *
- jms/serializer: ^3.0
- jojo1981/typed-collection: ^5.0
- jojo1981/typed-set: ^5.0
Requires (Dev)
- dg/bypass-finals: ^1.3
- doctrine/cache: ^1.8
- php-coveralls/php-coveralls: ^2.4
- phpspec/prophecy-phpunit: ^2.0
- phpunit/phpunit: ^9.5
README
作者:Joost Nijhuis <jnijhuis81@gmail.com>
这个库是 jms/serializer
包的扩展,包含自定义处理器,以支持与一些第三方库协同工作。有关 JMS Serializer Handlers 的更多信息,请参阅此处。
该库支持
- 来自
jojo1981/typed-collection
包的Jojo1981\TypedCollection\Collection
实例。
安装
库
git clone https://github.com/jojo1981/jms-serializer-handlers.git
Composer
composer require jojo1981/jms-serializer-handlers
使用
<?php use JMS\Serializer\Accessor\DefaultAccessorStrategy; use JMS\Serializer\Construction\UnserializeObjectConstructor; use JMS\Serializer\Handler\HandlerRegistry; use JMS\Serializer\Naming\CamelCaseNamingStrategy; use JMS\Serializer\Naming\SerializedNameAnnotationStrategy; use JMS\Serializer\SerializerBuilder; use Jojo1981\JmsSerializerHandlers\TypedCollectionAccessorStrategyDecorator; use Jojo1981\JmsSerializerHandlers\TypedCollectionObjectConstructorDecorator; use Jojo1981\JmsSerializerHandlers\TypedCollectionSerializationHandler; use Jojo1981\JmsSerializerHandlers\TypedSetSerializationHandler; use Jojo1981\JmsSerializerHandlers\UnionSerializationHandler; require 'vendor/autoload.php'; $propertyNamingStrategy = new SerializedNameAnnotationStrategy(new CamelCaseNamingStrategy()); $accessorStrategy = new TypedCollectionAccessorStrategyDecorator(new DefaultAccessorStrategy()); $serializer = (new SerializerBuilder()) ->setDebug(true) ->setCacheDir(__DIR__ . '/var/cache/serializer') ->setAccessorStrategy($accessorStrategy) ->setPropertyNamingStrategy($propertyNamingStrategy) ->addDefaultHandlers() ->configureHandlers(static function (HandlerRegistry $handlerRegistry): void { $handlerRegistry->registerSubscribingHandler(new TypedCollectionSerializationHandler()); $handlerRegistry->registerSubscribingHandler(new TypedSetSerializationHandler()); $handlerRegistry->registerSubscribingHandler(new UnionSerializationHandler()); }) ->setObjectConstructor(new TypedCollectionObjectConstructorDecorator(new UnserializeObjectConstructor())) ->build();