gpt4 book ai didi

php - 在哪里放置/如何处理 Laravel 中的枚举?

转载 作者:IT王子 更新时间:2023-10-28 23:59:08 25 4
gpt4 key购买 nike

Laravel 有 a <select> form helper它将字典作为输入。我喜欢将所有这些的值(value)观放在一个中心位置。例如,我可能有一个如下所示的枚举:

$phoneTypes = [
'CELL' => "Cellular",
'HOME' => "Home",
'WORK' => "Work",
];

我想在我的 View /模板和数据库中使用它:

Schema::create('customers', function (Blueprint $table) {
$table->increments('id');
$table->enum('pri_phone_type',array_keys($phoneTypes));
...
});
  1. 有推荐的放置这些的地方吗?
  2. 我能否将它们设为全局,以便在所有 View 中轻松访问它们?

最佳答案

🚨 更新:PHP 8.1 终于带来了对枚举的原生支持! 🥳🎉

在这里查看更多内容:

https://stitcher.io/blog/php-enums https://php.watch/versions/8.1/enums https://www.php.net/manual/en/language.enumerations.php

我下面的原始答案不再适用,但如果您使用的是旧版本的 PHP...


原始答案

处理枚举有多种选择。不过,在我们看一些之前,我首先强烈建议您不要使用数据库 enum 列类型。

数据库枚举存在问题的原因有很多。我建议阅读这篇文章,例如:

http://komlenic.com/244/8-reasons-why-mysqls-enum-data-type-is-evil/

因此,让我们看看其他几个选项。

使用 Laravel 配置

由于您使用的是 Laravel,一个非常简单的选择是在配置文件中添加一组选项。

假设您使用以下内容创建一个新文件 config/enums.php:

return [
'phone_types' => [
'CELL' => "Cellular",
'HOME' => "Home",
'WORK' => "Work",
]
];

您现在可以在代码的任何位置访问 config('enums.phone_types'),包括您的 Blade 模板。

使用 PHP 包

@Banford 的回答展示了如何使用类常量执行基本的枚举类型行为。如果您喜欢这种方法,我建议您查看这篇文章和基于此概念构建的包以提供强类型枚举:

https://stitcher.io/blog/php-enums

https://github.com/spatie/enum

你会像这样创建一个类:

/**
* @method static self cell()
* @method static self home()
* @method static self work()
*/
class PhoneTypes extends Enum
{
}

现在您可以在您的应用中调用 PhoneTypes::home()。如果需要,请查看该包的文档以了解如何创建值映射。

使用数据库关系

如果您真的想在数据库中管理您的选项,我会创建一个单独的phone_types 数据库表并创建与您的客户 表。与使用 enum 列类型相比,这仍然是一个更好的选择。

关于php - 在哪里放置/如何处理 Laravel 中的枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25705878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com