yokai/enum-bundle

带有 Symfony 集成的简单枚举系统

安装次数: 78,839

依赖关系: 1

建议者: 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],
];

入门

让我们举一个例子:我们的应用程序有一些成员,每个成员都有一个 status,可以是

  • new,标记为 "New"(新)
  • validated,标记为 "Validated"(验证过的)
  • disabled,标记为 "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 支持此包。