b2pweb / bdf-serializer
Bdf Serializer 组件
v1.2.1
2024-02-26 09:48 UTC
Requires
- php: ~7.1 | ~8.0.0 | ~8.1.0 | ~8.2.0 | ~8.3.0
- doctrine/instantiator: ^1.0.3|^2.0.0
- phpdocumentor/reflection-docblock: ^4.0|~5.0
- psr/simple-cache: ^1.0|~2.0|~3.0
Requires (Dev)
- doctrine/annotations: ^1.14 || ^2.0
- friendsofphp/php-cs-fixer: ^3.0
- jeremeamia/superclosure: ^2.3
- jms/serializer: ^1.0|^3.0
- phpunit/phpunit: ~8.0|~9.0
- symfony/phpunit-bridge: ~4.3|~5.0|~6.0
- vimeo/psalm: ~4.19
Suggests
- jeremeamia/superclosure: Required to serialize closure (~2.1)
- jms/serializer: Required to use JMS metadata (^3.0)
- symfony/cache: Required to use default cache if string path is given to builder (~4.3)
This package is auto-updated.
Last update: 2024-09-27 08:40:03 UTC
README
Bdf Serializer 可以标准化、激活/提取和编码数据或对象。它使用 doctrine/instantiator 来实例化类,并使用 phpdocumentor 来读取注释。
使用 Composer 安装
composer require b2p/bdf-serializer
基本用法
<?php use Bdf\Serializer\SerializerBuilder; $serializer = SerializerBuilder::create()->build(); $json = $serializer->toJson($object); //...
声明元数据
提供两种驱动程序。静态方法调用和注释驱动程序。
静态方法驱动程序
声明您的静态方法以构建元数据
<?php use Bdf\Serializer\Metadata\Builder\ClassMetadataBuilder; use DateTime; class User { /** * @var integer */ private $id; /** * @var string */ private $name; /** * @var DateTime */ private $date; /** * @param ClassMetadataBuilder $builder */ public static function loadSerializerMetadata($builder) { $builder->integer('id'); $builder->string('name'); // You can also add group, alias, ... $builder->string('name') ->addGroup('all') ->alias('user_name') ->since('1.0.0'); // DateTime options are available $builder->dateTime('date') ->dateFormat('Y/m/d H:i') ->timezone('+01:00') // Use this timezone in internal ->toTimezone('+00:00'); // Export date with this timezone } }
注释驱动程序
注释驱动程序使用 phpdocumentor/reflection-docblock。标签 @var
将被读取。如果没有找到标签,则默认类型为 string
。
支持的标签
var
: 此注释指定属性的类型。此标签在反序列化时是必需的。since
: 启用对象版本控制。值指定从哪个版本开始此属性可用。until
: 启用对象版本控制。值指定此属性可用到的版本。SerializeIgnore
: 不要序列化此属性。
注意:如果在 phpdoc 中没有检测到类型,我们尝试添加 PHP 7.4 中添加的类型属性值
JMS/serializer 驱动程序
Bdf\Serializer\Metadata\Driver\JMSAnnotationDriver
驱动程序允许您使用 JMS 驱动程序。将使用 JMS 元数据来创建 Bdf 元数据。仅使用序列化器的一小部分选项。
serializedName
readOnly
inline
sinceVersion
untilVersion
getter
setter
groups
type
注意:此驱动程序与 jms/serializer > v3.0 和 php > v7.2 兼容
<?php use Bdf\Serializer\Metadata\Driver\JMSAnnotationDriver; use JMS\Serializer\Metadata\Driver\AnnotationDriver as BaseJMSAnnotationDriver; $driver = new JMSAnnotationDriver(new BaseJMSAnnotationDriver(...));
序列化选项
NormalizationContext
包含规范化选项。
exclude
: 从规范化中排除属性。include
: 包括规范化中的属性。groups
: 包括的属性组。null
: 如果为 true,则添加空值。meta_type
: 在有效载荷中包含元数据 "@type"。version
: 为支持版本控制序列化的对象设置版本。字符串版本应与 PHP 函数version_compare
兼容。circular_reference_limit
: 循环引用的数量。默认值 1。remove_default_value
: 如果属性设置为默认值,则不要注入属性的值。
日期时间选项
dateFormat
: 规范化选项,用于指定格式。dateTimezone
: 使用给定的时区格式化日期。timezoneHint
: 反规范化选项,用于帮助从输入字符串中检测时区。
可用于 NormalizationContext
和 DenormalizationContext
的选项。
throws_on_accessor_error
: 默认情况下,如果属性在写入或读取时抛出Error
,则跳过值。此选项将从访问器抛出错误(调试目的)。
示例
<?php use \Bdf\Serializer\Context\NormalizationContext; $object = (object)[ "name" => "John", "age" => null, ]; $builder = new \Bdf\Serializer\SerializerBuilder(); $builder->setNormalizers([new \Bdf\Serializer\Normalizer\ObjectNormalizer()]); $serializer = $builder->build(); echo $serializer->toJson($object); // {"name":"John"} echo $serializer->toJson($object, [NormalizationContext::NULL => true]); // {"name":"John","age":null}