palabs / enum-bundle
php 8.1 枚举的 Symfony 扩展包
3.0.0
2024-02-09 05:23 UTC
Requires
- php: ^8.2
- doctrine/common: ^2.8 || ^3.0
- doctrine/orm: ^2.8
- 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
该扩展包提供 PaLabs/php-enum 与 symfony 的集成
功能
- 枚举表单类型
- 枚举翻译器(带 twig 扩展)
- Doctrine 集成(枚举字段类型,类型自动生成)
- 枚举自动初始化器
安装
- 使用 composer 安装扩展包
composer require palabs/enum-bundle
- 将扩展包添加到扩展包列表(symfony 5 中的 bundles.php 文件)
return [ PaLabs\EnumBundle\PaEnumBundle::class => ['all' => true], ];
- 创建配置(在您的配置目录中)。示例
pa_enum: translator: domain: 'enums' doctrine: path: - '%kernel.project_dir%/src'
使用方法
翻译器
EnumTranslator 类提供翻译枚举值的方法。示例
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); } }
枚举表单
EnumType 类为您的表单提供 symfony 表单类型。示例
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 类型
该扩展包提供基于您的枚举的 doctrine 类型生成机制。例如,如果您有一个实体类
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; } }
扩展包将自动为 BookType 枚举生成一个 doctrine 类型并将其添加到 doctrine 类型配置中。您可以指定枚举所在的路径
pa_enum: doctrine: path: - '%kernel.project_dir%/src' - '%kernel.project_dir%/vendor/my-bundle/src'
枚举初始化器
为了避免为每个枚举手动调用 Enum::init(),您可以使用枚举初始化器。只需将其添加到扩展包配置
pa_enum: initializer: path: - - '%kernel.project_dir%/src'
并且扩展包将自动为路径中的每个枚举调用 init()。init() 将在扩展包启动时调用。