DMT-软件 / jms-parameter-bag-handler
一个JMS序列化处理程序,可以序列化和反序列化未预定义的参数包
v1.0.0
2018-05-18 10:17 UTC
Requires
- php: ^7.1
- jms/serializer: ^1.11
Requires (Dev)
- phpunit/phpunit: ^7.0
This package is auto-updated.
Last update: 2024-08-30 01:54:15 UTC
README
安装
composer require dmt-software/jms-parameter-bag-handler
使用方法
配置序列化器
<?php use DMT\Serializer\ParameterBagHandler; use JMS\Serializer\Handler\HandlerRegistry; use JMS\Serializer\SerializerBuilder; $serializer = SerializerBuilder::create() ->configureHandlers( function (HandlerRegistry $registry) { $registry->registerSubscribingHandler(new ParameterBagHandler()); } ) ->build();
启用ParameterBag
序列化器的行为通过一个名为ParameterBag的新类型进行了扩展。要使用此功能,请将JMS Serializer注解 @Type("ParameterBag")
添加到您的类属性中。
默认情况下,ParameterBag使用 DMT\Serializer\Parameter
的实例。您可以通过向ParameterBag类型添加FQCN来覆盖此行为,例如 @Type("ParameterBag<MyNamespace\MyParameter>")
。如果您这样做,请确保您的自定义参数实现了 DMT\Serializer\ParameterInterface
。
<?php use DMT\Serializer\ParameterBag; use JMS\Serializer\Annotation as JMS; class Entity { /** * @var ParameterBag * * @JMS\Type("ParameterBag") */ protected $parameters; /** * @return ParameterBag */ public function getParameters(): ParameterBag { return $this->parameters; } /** * @param ParameterBag $parameters */ public function setParameters(ParameterBag $parameters): void { $this->parameters = $parameters; } }
关于JMS-serializer的进一步阅读,如YAML或XML配置,请访问 JMS-serializer,网址为 https://jmsyst.com/libs/serializer
反序列化Json
<?php use DMT\Serializer\ParameterInterface; use JMS\Serializer\Serializer; /** @var Serializer $serializer */ $object = $serializer->deserialize('{"parameters":{"foo":"bar", "baz":false}}', Entity::class, 'json'); $parameters = $object->getParameters(); // iterate over all the parameters foreach ($parameters as $parameter) { /** @var ParameterInterface $parameter */ var_dump($parameter->getValue()); // outputs string(3) "bar", bool(false) } // or access an expected parameter by it's name var_dump($parameters['baz']); // outputs class DMT\Serializer\Parameter#61 (2) { ... }
序列化到Json
<?php use DMT\Serializer\Parameter; use DMT\Serializer\ParameterBag; use JMS\Serializer\Serializer; $parameter = new Parameter(); $parameter->setName('foo'); $parameter->setValue(1); $object = new Entity(); $object->setParameters(new ParameterBag([$parameter])); /** @var Serializer $serializer */ echo $serializer->serialize($object, 'json'); // outputs {"parameters":{"foo":1}}