wakeapp / enumer-bundle
Provides possibility for work with ENUM without reflection usage on the runtime
Installs: 18 743
Dependents: 0
Suggesters: 1
Security: 0
Stars: 3
Watchers: 7
Forks: 0
Open Issues: 0
Type:symfony-bundle
Requires
- php: ~7.1||~8.0
- symfony/config: ~3.4||~4.0||~5.0
- symfony/dependency-injection: ~3.4||~4.0||~5.0
- symfony/finder: ~3.4||~4.0||~5.0
- symfony/http-kernel: ~3.4||~4.0||~5.0
- wakeapp/enumer: ^1.0
This package is auto-updated.
Last update: 2021-11-30 17:46:46 UTC
README
Введение
Бандл предоставляет возможность использовать любой класс с константами в качестве 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