palabs / enum-bundle
Symfony bundle for php 8.1 enums
Installs: 1 636
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 1
Forks: 1
Open Issues: 2
Type:symfony-bundle
Requires
- php: ^8.2
- doctrine/common: ^2.8 || ^3.0 || ^4.0
- doctrine/orm: ^2.8 || ^3.0
- symfony/dependency-injection: ^6.0 || ^7.0
- symfony/doctrine-bridge: ^6.0 || ^7.0
- symfony/form: ^6.0 || ^7.0
- symfony/framework-bundle: ^6.0 || ^7.0
- symfony/http-kernel: ^6.0 || ^7.0
- symfony/translation-contracts: ^2.0
- twig/twig: ^3.0
Requires (Dev)
- phpunit/phpunit: ^9
- symfony/phpunit-bridge: ^6.0 || ^7.0
- symfony/translation: ^6.0 || ^7.0
- symfony/yaml: ^6.0 || ^7.0
README
Bundle provide integration PaLabs/php-enum with symfony
Features
- Enum form type
- Enum translator (with twig extension)
- Doctrine integration (enum field type, types auto generation)
- Enum auto initializer
Installation
- Require bundle using composer
composer require palabs/enum-bundle
- Add bundle to bundle list (file bundles.php in symfony 5)
return [ PaLabs\EnumBundle\PaEnumBundle::class => ['all' => true], ];
- Create configuration (in your config dir). Example:
pa_enum: translator: domain: 'enums' doctrine: path: - '%kernel.project_dir%/src'
Usage
Translator
EnumTranslator class provide methods to translate enum values. Example:
use PaLabs\Enum\Enum; use \PaLabs\EnumBundle\Translator\EnumTranslator; use Symfony\Component\HttpFoundation\Request; class ActionEnum extends Enum { public static ActionEnum $VIEW, $EXIT; } ActionEnum::init(); class FooController { private EnumTranslator $enumTranslator; public function __construct(EnumTranslator $enumTranslator) { $this->enumTranslator = $enumTranslator; } public function fooAction(Request $request) { return $this->enumTranslator->translate(ActionEnum::$VIEW); } }
Enum form
Class EnumType provide symfony form type for your forms. Example:
use PaLabs\EnumBundle\Form\EnumType; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; class MyForm extends AbstractType { public function buildForm(FormBuilderInterface $builder,array $options){ $builder->add('field', EnumType::class, [ 'type'=>ActionEnum::class, 'required' => true, ]); } }
Doctrine type
Bundle provide a mechanism for doctrine type generation based on you enums. For example, if you have an entity class:
use Doctrine\ORM\Mapping as ORM; use PaLabs\Enum\Enum; class BookType extends Enum { public static BookType $MONOGRAPHY, $THESES, $OTHER: } BookType::init(); class Book { /** * @ORM\Column(type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private ?int $id = null; /** * @ORM\Column(name="name", type="text", nullable=false) */ private string $name = ''; /** * @ORM\Column(name="type", type=BookType::class, nullable=false) */ private BookType $type; public function __construct() { $this->type = BookType::$MONOGRAPHY; } }
Bundle will automaticly generate a doctrine type for BookType enum and add it to doctrine types config. You can specify paths where enums will be found:
pa_enum: doctrine: path: - '%kernel.project_dir%/src' - '%kernel.project_dir%/vendor/my-bundle/src'
Enum initializer
To not manually call Enum::init() for every enum, you can use enum initializer. Simply add to bundle config:
pa_enum: initializer: path: - - '%kernel.project_dir%/src'
And bundle will automatically call init() for every enum in path. init() will be called on bundle boot.