Бандл предоставляет возможность использовать любой класс с константами в качестве ENUM.
Главной особенностью является уход от работы с рефлексией во время исполнения. Данная оптимизация достигается благодаря сбору всех данных о константах классов на этапе компиляции контейнера.
Откройте консоль и, перейдя в директорию проекта, выполните следующую команду для загрузки наиболее подходящей стабильной версии этого бандла:
composer require wakeapp/enumer-bundleЭта команда подразумевает что Composer установлен и доступен глобально.
После включите бандл добавив его в список зарегистрированных бандлов в app/AppKernel.php файл вашего проекта:
<?phpdeclare(strict_types=1);
// app/AppKernel.phpclass AppKernel extends Kernel
{
// ...publicfunctionregisterBundles()
{
$bundles = [
// ...newWakeapp\Bundle\EnumerBundle\WakeappEnumerBundle(),
];
return$bundles;
}
// ...
}Чтобы начать использовать бандл предварительная конфигурация не требуется и имеет следующее значение по умолчанию:
wakeapp_enumer:
# список директорий, в которых будет происходить поиск классов, реализующих EnumInterfacesource_directories:
- 'src'# список классов, которые следует зарегистрировать вне зависимости от реализации EnumInterfacesource_classes: ~Чтобы зарегистрировать класс, содержащий константные значения, и использовать его в качестве enum - необходимо
добавить реализацию EnumInterface.
<?phpdeclare(strict_types=1);
namespaceAcme\Enum;
useWakeapp\Bundle\EnumerBundle\Enum\EnumInterface;
class GenderEnum implements EnumInterface
{
constMALE = 'Male';
constFEMALE = 'Female';
}Все классы, реализующие EnumInterface, будут доступны для работы с ними в сервисе
wakeapp_enumer.enum_registry (также сервис доступен при вызове посредством autowire).
<?phpdeclare(strict_types=1);
namespaceExample;
useAcme\Enum\GenderEnum;
useSymfony\Component\DependencyInjection\Container;
/** @var Container $container */$enumerRegistry = $container->get('wakeapp_enumer.enum_registry');
$list = $enumerRegistry->getOriginalList(GenderEnum::class); echojson_encode($list);// {"MALE":"Male","FEMALE":"Female"}$listCombine = $enumerRegistry->getCombinedList(GenderEnum::class); echojson_encode($listCombine); // {"Male":"Male","Female":"Female"}$normalizedList = $enumerRegistry->getNormalizedList(GenderEnum::class); echojson_encode($normalizedList); // {"male":"Male","female":"Female"}$originalValue = $enumerRegistry->getOriginalValue(GenderEnum::class, 'FemALE'); echo$originalValue; // 'Female'Допустим у нас есть класс из vendor, который содержит константы и нам необходимо его зарегистрировать.
<?phpdeclare(strict_types=1);
namespaceVendor\Acme\Enum;
class VendorGenderEnum
{
constMALE = 'Male';
constFEMALE = 'Female';
}Чтобы зарегистрировать этот класс необходимо добавить его в массив source_classes:
wakeapp_enumer:
source_classes:
- Vendor\Acme\Enum\VendorGenderEnum