yeugone / enum-bundle
v5.0.1
2024-09-05 10:06 UTC
Requires
- php: ^8.2
- symfony/framework-bundle: ^7.0
Requires (Dev)
- doctrine/annotations: ^1.14
- myclabs/php-enum: ^1.8
- phpstan/phpstan: ^1.11
- phpunit/phpunit: ^9.6
- symfony/form: ^7.0
- symfony/http-kernel: ^7.0
- symfony/translation: ^7.0
- symfony/twig-bundle: ^7.0
- symfony/validator: ^7.0
- symfony/yaml: ^7.0
- symplify/easy-coding-standard: ^12.3
- twig/twig: ^2.0|^3.0
Suggests
- myclabs/php-enum: Integrate with enum object
- symfony/form: Add enum form type
- symfony/framework-bundle: Integrate with Symfony Framework
- symfony/validator: Add enum validation
- twig/twig: Add enum util functions
- 5.x-dev
- v5.0.1
- v5.0.0
- 4.x-dev
- v4.1.0
- v4.0.3
- v4.0.2
- v4.0.1
- v4.0.0
- 3.x-dev
- v3.3.0
- v3.2.0
- v3.1.0
- v3.0.0
- v3.0.0-alpha.2
- v3.0.0-alpha
- 2.x-dev
- v2.3
- v2.2
- v2.1
- v2.0
- v1.6
- v1.5
- v1.4
- v1.3
- v1.2
- v1.1
- v1.0
- dev-fixed-extension-deprecation
- dev-post-bump-review
- dev-phpstan
- dev-code-style
- dev-allow-symfony7-and-bump-dependencies
This package is auto-updated.
Last update: 2024-09-05 10:07:02 UTC
README
本仓库旨在为 Symfony 提供简单的枚举实现。
安装
使用 Composer 将扩展添加为依赖项
$ composer require yokai/enum-bundle
在内核中启用扩展
<?php return [ Yokai\EnumBundle\YokaiEnumBundle::class => ['all' => true], ];
入门指南
让我们举一个例子:我们的应用程序有一些成员,每个成员都有一个 状态
,可以是
new
,标记为“新”validated
,标记为“已验证”disabled
,标记为“禁用”
创建枚举
我们首先需要创建一个处理枚举的类
<?php declare(strict_types=1); namespace App\Enum; use Yokai\EnumBundle\Enum; class StatusEnum extends Enum { public function __construct() { parent::__construct(['New' => 'new', 'Validated' => 'validated', 'Disabled' => 'disabled']); } }
这样就完成了,扩展现在知道你的枚举。
注意:每个枚举都有一个 名称。这个名称是应用程序中枚举的标识符。你可以为这个目的使用任何字符串,只要它 是唯一的。在这里使用枚举类是一个非常常见的方法。
配置验证
现在我们可以配置 Member
模型的验证了
<?php declare(strict_types=1); namespace App\Model; use App\Enum\StatusEnum; use Yokai\EnumBundle\Validator\Constraints\Enum; class Member { #[Enum(enum: StatusEnum::class)] public ?string $status = null; }
设置表单
现在验证已配置,我们只需在表单上添加一个字段即可
<?php declare(strict_types=1); namespace App\Form\Type; use App\Model\Member; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; class MemberType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options): void { $builder // Because we added the #[Enum] constraint to Member::$status property // the bundle will be able to find out the appropriate form type automatically ->add('status') ; } public function configureOptions(OptionsResolver $resolver): void { $resolver->setDefault('data_class', Member::class); } }
渲染枚举标签
在 Twig 模板中显示任何枚举值的标签
{{ member.status|enum_label('App\\Enum\\StatusEnum') }}
翻译枚举
现在,你可能需要在不同区域设置中显示枚举标签。
我们为你提供了用于翻译枚举的专用基类
<?php declare(strict_types=1); namespace App\Enum; use Symfony\Contracts\Translation\TranslatorInterface; use Yokai\EnumBundle\TranslatedEnum; class StatusEnum extends TranslatedEnum { public function __construct(TranslatorInterface $translator) { parent::__construct(['new', 'validated', 'disabled'], $translator, 'status.%s'); } }
现在你可以在你的目录中创建翻译密钥
# translations/messages.en.yaml status.new: New status.validated: Validated status.disabled: Disabled # translations/messages.fr.yaml status.new: Nouveau status.validated: Validé status.disabled: Désactivé
注意:翻译密钥格式使用
$transPattern
构造函数参数生成,该参数必须是有效的 sprintf 模式(包含一个%s
)
更多示例
请参阅 集成测试套件 中的示例 Symfony 项目。
食谱
- 创建 枚举
- 创建 翻译枚举
- 与 PHP 原生枚举 集成
- 与 myclabs/php-enum 集成
- 从标准 Symfony 迁移
- 与 SonataAdminBundle 集成
MIT 许可证
许可证可在 此处 找到。
作者
此包最初由 Yann Eugoné 创建。请参阅 贡献者列表。
感谢 PrestaConcept 对此包的支持。