Wakeapp/枚举包

此包已被废弃,不再维护。未建议替代包。

提供无需在运行时使用反射即可与ENUM交互的可能性

安装量: 18,741

依赖者: 0

建议者: 1

安全: 0

星标: 3

关注者: 7

分支: 0

公开问题: 0

类型:symfony-bundle

v1.2.1 2021-03-02 15:59 UTC

This package is auto-updated.

Last update: 2021-11-30 17:46:46 UTC


README

Latest Stable Version Total Downloads

简介

该包提供将任何具有常量的类用作ENUM的能力。

其主要特点是避免在执行期间使用反射。这种优化是通过在容器编译阶段收集所有关于类常量的数据来实现的。

安装

步骤 1: 加载包

打开控制台,切换到项目目录,然后运行以下命令以加载此包的稳定版本

    composer require wakeapp/enumer-bundle

此命令假定Composer已安装并全局可用。

步骤 2: 引入包

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

<?php declare(strict_types=1);
// app/AppKernel.php

class AppKernel extends Kernel
{
    // ...

    public function registerBundles()
    {
        $bundles = [
            // ...

            new Wakeapp\Bundle\EnumerBundle\WakeappEnumerBundle(),
        ];

        return $bundles;
    }

    // ...
}

配置

为了开始使用包,不需要预先配置,默认设置如下

wakeapp_enumer:
    # список директорий, в которых будет происходить поиск классов, реализующих EnumInterface
    source_directories:
        - 'src'
    # список классов, которые следует зарегистрировать вне зависимости от реализации EnumInterface
    source_classes: ~

使用

要注册一个包含常量值的类并将其用作enum,需要添加EnumInterface的实现。

<?php declare(strict_types=1);

namespace Acme\Enum;

use Wakeapp\Bundle\EnumerBundle\Enum\EnumInterface;

class GenderEnum implements EnumInterface
{
    const MALE = 'Male';
    const FEMALE = 'Female';
}

所有实现EnumInterface的类都可通过服务wakeapp_enumer.enum_registry进行操作(通过autowire调用也可访问)。

<?php declare(strict_types=1);

namespace Example;

use Acme\Enum\GenderEnum;
use Symfony\Component\DependencyInjection\Container;

/** @var Container $container */
$enumerRegistry = $container->get('wakeapp_enumer.enum_registry');

$list = $enumerRegistry->getOriginalList(GenderEnum::class); 
echo json_encode($list);// {"MALE":"Male","FEMALE":"Female"}

$listCombine = $enumerRegistry->getCombinedList(GenderEnum::class); 
echo json_encode($listCombine); // {"Male":"Male","Female":"Female"}

$normalizedList = $enumerRegistry->getNormalizedList(GenderEnum::class); 
echo json_encode($normalizedList); // {"male":"Male","female":"Female"}

$originalValue = $enumerRegistry->getOriginalValue(GenderEnum::class, 'FemALE'); 
echo $originalValue; // 'Female'

附加信息

手动注册常量类

假设我们有一个包含常量的vendor类,我们需要注册它。

<?php declare(strict_types=1);

namespace Vendor\Acme\Enum;

class VendorGenderEnum
{
    const MALE = 'Male';
    const FEMALE = 'Female';
}

要注册此类,需要将其添加到source_classes数组中。

wakeapp_enumer:
    source_classes:
        - Vendor\Acme\Enum\VendorGenderEnum

许可证

license