kwaadpepper / enum
适用于任何项目的枚举类型
Requires
- php: >=8.2
Requires (Dev)
README
该软件包的目标是提供一个完整的解决方案来解决长时间以来PHP的弱点:它没有枚举支持。这将随着PHP 8 枚举提案而改变。在此期间,我们仍然支持它,这使得我们可以生成通用和可扩展的应用程序(而不是具有单例SQL表...)。
您将能够使用简单的定义在任何项目中使用枚举,请参阅示例 基本示例 或一个 更复杂的示例
安装
通过Composer
$ composer require kwaadpepper/enum
使用方法
所有枚举有两个属性:`label` 和 `value`,只有 `value` 必须是唯一的。每个枚举可以拥有多个选项,所有这些选项都写在类注释中作为静态方法,这些方法必须是唯一的!
- 在任何项目中,请参阅 示例 来创建枚举类。
-
调用枚举值
Days::mon()
-
比较枚举
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
-
打印枚举
echo Days::mon(); // 2 echo Days::tue(); // 4 echo Days::mon()->label; // Monday
如您所见,枚举实现了 `__toString` 方法,您可以通过重写该方法来显示标签而不是值。这种默认行为设置为这样的目的是为了在Laravel中有更好的行为。
-
序列化枚举
echo json_encode(Days::mon()); // {"label":"Monday","value":2}
枚举实现了 JsonSerializable 接口
- 在Laravel项目中,您可以使用枚举以多种方式
-
作为属性
// Add theses to your model use CastsEnums; protected $enumCasts = [ 'day' => Days::class ];
这允许您的模型使用其值将枚举存储在数据库中,然后在访问它时将该属性转换为枚举
-
作为路由参数
定义如下路由
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]); }
-
作为请求参数使用验证
请参阅 此请求示例。
new EnumIsValidRule(Days::class)
它使用 EnumIsValidRule 来验证参数是否为有效的枚举值。
请注意,您可能还需要将参数转换为 int,如果枚举值是 int 的话,因为枚举检查是严格的
-
作为模型主键
请参阅 单元测试 使用 测试中的 Report 枚举类
变更日志
请参阅 changelog 了解最近更改的详细信息。
测试
$ composer test
贡献
请参阅 contributing.md 了解详细信息和一个待办事项列表。
安全性
如果您发现任何与安全相关的问题,请通过电子邮件发送至 github@jeremydev.ovh,而不是使用问题跟踪器。
致谢
许可
MIT。请参阅 许可文件 了解更多信息。