aboutcoders/enum-serializer-bundle

一个symfony包,用于序列化和反序列化类型为myclabs/php-enum的枚举,使用jms/serializer

0.4.0 2021-04-14 15:14 UTC

This package is not auto-updated.

Last update: 2024-09-26 10:27:33 UTC


README

一个symfony包,用于序列化和反序列化类型为myclabs/php-enum的枚举,使用jms/serializer

构建状态: Build Status

注意:目前只支持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格式的支持