aboutcoders / enum-serializer-bundle
一个symfony包,用于序列化和反序列化类型为myclabs/php-enum的枚举,使用jms/serializer
0.4.0
2021-04-14 15:14 UTC
Requires
- php: >=7.1.0
- jms/serializer-bundle: ~1.0|~2.0|~3.0
- myclabs/php-enum: ~1.4
- symfony/dependency-injection: ^3.3 || ^4.0 || ^5.0
- symfony/framework-bundle: ^3.0 || ^4.0 || ^5.0
Requires (Dev)
This package is not auto-updated.
Last update: 2024-09-26 10:27:33 UTC
README
一个symfony包,用于序列化和反序列化类型为myclabs/php-enum的枚举,使用jms/serializer。
注意:目前只支持json格式。
安装
将AbcEnumSerializerBundle添加到您的composer.json
文件中
php composer.phar require aboutcoders/enum-serializer-bundle
在AppKernel.php类中包含该包
# app/AppKernel.php public function registerBundles() { $bundles = array( ... new Abc\Bundle\EnumSerializerBundle\AbcEnumSerializerBundle(), ); }
用法
定义枚举,如myclabs/php-enum中定义的枚举
namespace Acme; use MyCLabs\Enum\Enum; class MyEnum { const VALUE_1; const VALUE_2; }
为了序列化和反序列化枚举,您可以在app/config.yml中注册类型
# app/config/config.yml abc_enum_serializer: serializer: types: - Acme\MyEnum
或者您可以在服务容器中注册枚举,并使用标签abc.enum
services: my_enum: class: Acme\MyEnum tags: - { name: abc.enum }
注意,此服务应声明为私有,并且永远不会被实例化,因为这会导致异常。此服务的唯一目的是提供需要注册为枚举类型的类的完全限定名称。
最后,如果您将其用作成员变量,可以配置类型
use JMS\Serializer\Annotation\Type; class MyExample { /** * @Type("Acme\MyEnum") */ private $myEnum; }
或直接引用类型进行序列化和反序列化
$serializer = $container->get('jms_serializer'); $data = $serializer->serialize($subject, 'json'); $enum = $this->serializer->deserialize($data, MyExample::class, 'json');
待办事项
- 添加对XML和YAML格式的支持