适用于任何项目的枚举类型

3.0.0 2023-06-02 10:12 UTC

This package is auto-updated.

Last update: 2024-08-31 00:52:56 UTC


README

GitHub Latest Version on Packagist Total Downloads GitHub Workflow Status

该软件包的目标是提供一个完整的解决方案来解决长时间以来PHP的弱点:它没有枚举支持。这将随着PHP 8 枚举提案而改变。在此期间,我们仍然支持它,这使得我们可以生成通用和可扩展的应用程序(而不是具有单例SQL表...)。

您将能够使用简单的定义在任何项目中使用枚举,请参阅示例 基本示例 或一个 更复杂的示例

安装

通过Composer

$ composer require kwaadpepper/enum

使用方法

所有枚举有两个属性:`label` 和 `value`,只有 `value` 必须是唯一的。每个枚举可以拥有多个选项,所有这些选项都写在类注释中作为静态方法,这些方法必须是唯一的!

  • 在任何项目中,请参阅 示例 来创建枚举类。
  1. 调用枚举值

    Days::mon()
  2. 比较枚举

    Days::mon()->equals(Days::tue()) // false
    Days::mon()->equals(Days::mon()) // true
    Days::mon()->value === Days::tue()->value // false
    Days::mon()->value === Days::mon()->value // true
  3. 打印枚举

    echo Days::mon(); // 2
    echo Days::tue(); // 4
    echo Days::mon()->label; // Monday

    如您所见,枚举实现了 `__toString` 方法,您可以通过重写该方法来显示标签而不是值。这种默认行为设置为这样的目的是为了在Laravel中有更好的行为。

  4. 序列化枚举

    echo json_encode(Days::mon()); // {"label":"Monday","value":2}

    枚举实现了 JsonSerializable 接口

  • 在Laravel项目中,您可以使用枚举以多种方式
  1. 作为属性

    // Add theses to your model
     use CastsEnums;
     protected $enumCasts = [
         'day' => Days::class
     ];

    这允许您的模型使用其值将枚举存储在数据库中,然后在访问它时将该属性转换为枚举

  2. 作为路由参数

    定义如下路由

    Route::get('/days/{day}', function (Days $day) {
             return response()->json([$day]);
         })->middleware('bindings');
     // OR
     Route::get('/days/{day}', [DayController::class, 'getDay']);

    然后在 `DayController` 示例的控制器上

    public function getDay(Request $request, Day $day) {
        return response()->json([$day]);
    }
  3. 作为请求参数使用验证

    请参阅 此请求示例

    new EnumIsValidRule(Days::class)

    它使用 EnumIsValidRule 来验证参数是否为有效的枚举值。

    请注意,您可能还需要将参数转换为 int,如果枚举值是 int 的话,因为枚举检查是严格的

  4. 作为模型主键

    请参阅 单元测试 使用 测试中的 Report 枚举类

变更日志

请参阅 changelog 了解最近更改的详细信息。

测试

$ composer test

贡献

请参阅 contributing.md 了解详细信息和一个待办事项列表。

安全性

如果您发现任何与安全相关的问题,请通过电子邮件发送至 github@jeremydev.ovh,而不是使用问题跟踪器。

致谢

许可

MIT。请参阅 许可文件 了解更多信息。