PHP code example of jiannei / laravel-enum
1. Go to this page and download the library: Download jiannei/laravel-enum library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
jiannei / laravel-enum example snippets
namespace Jiannei\Enum\Laravel\Tests\Enums;
use Jiannei\Enum\Laravel\Support\Traits\EnumEnhance;
enum UserType: int
{
use EnumEnhance;
case ADMINISTRATOR = 0;
case MODERATOR = 1;
case SUBSCRIBER = 2;
}
// 获取枚举的值
UserType::ADMINISTRATOR->value; // 0
// 获取枚举的名称
UserType::ADMINISTRATOR->name(); // 'ADMINISTRATOR'
// 获取枚举的值(通过方法)
UserType::ADMINISTRATOR->value(); // 0
// 获取所有已定义枚举的名称
$names = UserType::names(); // ['ADMINISTRATOR', 'MODERATOR', 'SUBSCRIBER']
// 获取所有已定义枚举的值
$values = UserType::values(); // [0, 1, 2]
// 获取枚举数量
$count = UserType::count(); // 3
// 检查定义的枚举中是否包含某个「枚举值」
UserType::hasValue(1); // true
UserType::hasValue(-1); // false
// 检查定义的枚举中是否包含某个「枚举名称」
UserType::hasName('MODERATOR'); // true
UserType::hasName('ADMIN'); // false
// 通过 value 实例化
$admin = UserType::fromValue(0); // UserType::ADMINISTRATOR
// 通过 name 实例化
$admin = UserType::fromName('ADMINISTRATOR'); // UserType::ADMINISTRATOR
// 通过 name/value 智能猜测
$subscriber = UserType::guess(2); // UserType::SUBSCRIBER
$subscriber = UserType::guess('SUBSCRIBER'); // UserType::SUBSCRIBER
// 获取随机枚举实例
$random = UserType::random(); // 随机返回一个枚举实例
$admin = UserType::ADMINISTRATOR;
// 检查是否等于某个枚举
$admin->is(UserType::ADMINISTRATOR); // true
$admin->is(UserType::SUBSCRIBER); // false
// 检查是否不等于某个枚举
$admin->isNot(UserType::SUBSCRIBER); // true
$admin->isNot(UserType::ADMINISTRATOR); // false
// 检查是否为多个枚举中的任意一个
$admin->isAny(UserType::ADMINISTRATOR, UserType::MODERATOR); // true
$admin->isAny(UserType::MODERATOR, UserType::SUBSCRIBER); // false
$admin = UserType::ADMINISTRATOR;
$moderator = UserType::MODERATOR;
$subscriber = UserType::SUBSCRIBER;
// 检查是否为第一个枚举
$admin->isFirst(); // true
$moderator->isFirst(); // false
// 检查是否为最后一个枚举
$subscriber->isLast(); // true
$admin->isLast(); // false
// 获取下一个枚举(如果是最后一个则返回 null)
$admin->next(); // UserType::MODERATOR
$moderator->next(); // UserType::SUBSCRIBER
$subscriber->next(); // null
// 获取上一个枚举(如果是第一个则返回 null)
$admin->previous(); // null
$moderator->previous(); // UserType::ADMINISTRATOR
$subscriber->previous(); // UserType::MODERATOR
// 转换为详细数组
$array = UserType::toArray();
/*
[
['name' => 'ADMINISTRATOR', 'value' => 0, 'description' => '管理员'],
['name' => 'MODERATOR', 'value' => 1, 'description' => '主持人'],
['name' => 'SUBSCRIBER', 'value' => 2, 'description' => '订阅用户'],
]
*/
// 转换为选择数组(适用于下拉框等场景)
$selectArray = UserType::toSelectArray(); // 支持多语言配置
/*
[
0 => '管理员',
1 => '主持人',
2 => '订阅用户',
]
*/
// 指定本地化组
$selectArray = UserType::toSelectArray('*');
/*
[
0 => '管理员',
1 => '监督员',
2 => '订阅用户',
]
*/
// 获取默认语言描述
UserType::ADMINISTRATOR->description(); // '管理员'
// 获取指定本地化组的描述
UserType::ADMINISTRATOR->description('*'); // 可能返回不同的翻译
// 在数组转换中使用多语言
$array = UserType::toArray('custom_group');
$selectArray = UserType::toSelectArray('custom_group');
try {
UserType::fromName('INVALID_NAME');
} catch (ValueError $e) {
// 错误信息会包含所有有效的枚举名称
echo $e->getMessage(); // "Invalid enum name "INVALID_NAME". Valid names are: ADMINISTRATOR, MODERATOR, SUBSCRIBER"
}
try {
UserType::fromValue(999);
} catch (ValueError $e) {
// 错误信息会包含所有有效的枚举值
echo $e->getMessage(); // "Invalid enum backing value "999". Valid values are: 0, 1, 2"
}
// 在控制器中使用
class UserController extends Controller
{
public function index(Request $request)
{
$userType = UserType::fromValue($request->input('type', 0));
$users = User::where('type', $userType->value)->get();
return response()->json([
'users' => $users,
'current_type' => [
'name' => $userType->name(),
'value' => $userType->value(),
'description' => $userType->description(),
'is_admin' => $userType->is(UserType::ADMINISTRATOR),
]
]);
}
public function getTypes()
{
return response()->json([
'types' => UserType::toSelectArray(),
'count' => UserType::count(),
]);
}
}
// 在模型中使用
class User extends Model
{
protected $casts = [
'type' => UserType::class,
];
public function isAdmin(): bool
{
return $this->type->is(UserType::ADMINISTRATOR);
}
public function canModerate(): bool
{
return $this->type->isAny(UserType::ADMINISTRATOR, UserType::MODERATOR);
}
public function getNextRole(): ?UserType
{
return $this->type->next();
}
}
// 在表单验证中使用
class CreateUserRequest extends FormRequest
{
public function rules()
{
return [
'type' => ['