yeugone/enum-bundle

该软件包已被弃用,不再维护。作者建议使用 yokai/enum-bundle 软件包。

简单的枚举系统,与 Symfony 集成

安装次数: 13,134

依赖者: 0

建议者: 0

安全: 0

星星: 12

关注者: 6

分支: 5

公开问题: 4

类型:symfony-bundle

v5.0.1 2024-09-05 10:06 UTC

README

Tests Coverage Contributors License

Latest Stable Version Latest Unstable Version Total Downloads Downloads Monthly

本仓库旨在为 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 项目。

食谱

MIT 许可证

许可证可在 此处 找到。

作者

此包最初由 Yann Eugoné 创建。请参阅 贡献者列表

感谢 PrestaConcept 对此包的支持。