mrgoodbytes8667/enum-serializer-bundle

一个用于在Symfony中启用spatie/enum序列化支持的扩展包


README

Packagist Version PHP from Packagist Symfony Versions Supported Symfony Versions Tested Symfony LTS Version Symfony Stable Version Symfony Dev Version Packagist License GitHub Release Workflow Status GitHub Tests Workflow Status GitHub By Version Workflow Status GitHub Coverage Workflow Status codecov
一个扩展包,提供一些PHP 8.1+枚举的辅助方法,灵感来源于spatie/enum

从5.x升级到6.0

  • 默认情况下,EnumNormalizer将不再作为服务注册。您必须手动启用它以继续使用。它将在v7版本中删除。

从3.x升级到4.0

从2.x升级到3.0

  • 将过时的对easyAdminChoices()formChoices()的调用替换为provideFormChoices()
  • 升级任何重写的provideFormChoices()getFormChoiceKey()getFormChoiceValue()protectedpublic

升级到2.0

将所有继承自Bytes\EnumSerializerBundle\Enums\Enum的类改为字符串支持的枚举,使用新的Bytes\EnumSerializerBundle\Enums\StringBackedEnumTrait特性和实现新的Bytes\EnumSerializerBundle\Enums\StringBackedEnumInterface接口。

  • Bytes\EnumSerializerBundle\Enums\StringBackedEnumTrait提供了与枚举切换相关的先前Enum类方法,包括一个jsonSerializable()方法以保持序列化的一致性。
  • Bytes\EnumSerializerBundle\Enums\StringBackedEnumInterface必须实现(或\JsonSerializable),以便序列化器能够正确返回标签/值,就像2.0之前一样。
  • 注意:Bytes\EnumSerializerBundle\Enums\StringBackedEnumInterface同时扩展了Bytes\EnumSerializerBundle\Enums\EasyAdminChoiceEnumInterfaceBytes\EnumSerializerBundle\Enums\FormChoiceEnumInterface,这两个接口都自动提供了与EasyAdminBundle和Symfony表单兼容的选择方法,并且易于覆盖。

之前

<?php


namespace Bytes\EnumSerializerBundle\Tests\Fixtures;


use Spatie\Enum\Enum;

/**
 * @method static self streamChanged()
 * @method static self userChanged()
 */
class ValuesEnum extends Enum
{
    /**
     * @return string[]
     */
    protected static function values(): array
    {
        return [
            'streamChanged' => 'stream',
            'userChanged' => 'user',
        ];
    }
}

之后

<?php


namespace Bytes\EnumSerializerBundle\Tests\Fixtures;


use Bytes\EnumSerializerBundle\Enums\StringBackedEnumInterface;
use Bytes\EnumSerializerBundle\Enums\StringBackedEnumTrait;

enum ValuesEnum: string implements StringBackedEnumInterface
{
    use StringBackedEnumTrait;

    case streamChanged = 'stream';
    case userChanged = 'user';
}

带有可选的PHPStorm弃用替换

<?php


namespace Bytes\EnumSerializerBundle\Tests\Fixtures;


use Bytes\EnumSerializerBundle\Enums\StringBackedEnumInterface;
use Bytes\EnumSerializerBundle\Enums\StringBackedEnumTrait;
use JetBrains\PhpStorm\Deprecated;

enum ValuesEnum: string implements StringBackedEnumInterface
{
    use StringBackedEnumTrait;

    case streamChanged = 'stream';
    case userChanged = 'user';
    
    #[Deprecated(reason: 'since 1.7.0, use "%name%" instead.', replacement: '%class%::%name%')]
    public static function streamChanged(): ValuesEnum
    {
        return ValuesEnum::streamChanged;
    }
    
    #[Deprecated(reason: 'since 1.7.0, use "%name%" instead.', replacement: '%class%::%name%')]
    public static function userChanged(): ValuesEnum
    {
        return ValuesEnum::userChanged;
    }
}

请注意,自动替换将不会删除函数后面的尾随()

安装

确保已全局安装Composer,如Composer文档的安装章节中所述。

使用Symfony Flex的应用程序

打开命令行,进入您的项目目录并执行以下命令

$ composer require mrgoodbytes8667/enum-serializer-bundle

不使用Symfony Flex的应用程序

步骤1:下载扩展包

打开命令行,进入您的项目目录并执行以下命令以下载此扩展包的最新稳定版本

$ composer require mrgoodbytes8667/enum-serializer-bundle

步骤2:启用扩展包

然后,通过将其添加到项目中config/bundles.php文件中注册的扩展包列表中,来启用扩展包

// config/bundles.php

return [
    // ...
    Bytes\EnumSerializerBundle\BytesEnumSerializerBundle::class => ['all' => true],
];

许可协议

spatie/enum包的启发并基于此。