nasyrov/laravel-enums

Laravel 枚举实现的包。

v1.1.11 2020-12-29 15:00 UTC

This package is auto-updated.

Last update: 2024-08-29 04:09:13 UTC


README

Latest Version on Packagist Software License Build Status Coverage Status Quality Score Total Downloads

Laravel 枚举实现的包。

要求

在继续之前,请确保已安装所有依赖项

安装

通过 Composer 拉取包

$ composer require nasyrov/laravel-enums

config/app.php 中注册服务提供者

'providers' => [
    ...
    Nasyrov\Laravel\Enums\EnumServiceProvider::class,
    ...
]

用法

通过命令生成新的枚举类

$ php artisan make:enum UserStatusEnum

定义枚举常量

/**
 * @method static UserStatusEnum ACTIVE()
 * @method static UserStatusEnum INACTIVE()
 */
class UserStatusEnum extends Enum
{
    const ACTIVE = 10;
    const INACTIVE = 20;
}

使用枚举时,可以创建实例或通过静态方法调用

$status = new UserStatusEnum(UserStatusEnum::ACTIVE);
$status = UserStatusEnum::ACTIVE();

为模型访问器类型提示

public function getStatusAttribute($attribute) {
    return new UserStatusEnum($attribute);
}

为模型修改器类型提示

public function setStatusAttribute(UserStatusEnum $attribute) {
    $this->attributes['status'] = $attribute->getValue();
}

验证

$this->validate($request, [
    'status' => [
        'required',
        Rule::in(UserStatusEnum::values()),
    ],
]);

本地化

use Nasyrov\Laravel\Enums\Enum as BaseEnum;

abstract class Enum extends BaseEnum
{
    /**
     * Get the enum labels.
     *
     * @return array
     */
    public static function labels()
    {
        return static::constants()
            ->flip()
            ->map(function ($key) {
                // Place your translation strings in `resources/lang/en/enum.php`
                return trans(sprintf('enum.%s', strtolower($key)));
            })
            ->all();
    }
}
<select name="status">
    @foreach (UserStatusEnum::labels() as $value => $label)
        <option value="{{ $value }}">
            {{ $label }}
        </option>
    @endforeach
</select>

测试

$ composer lint
$ composer test

安全性

如果您发现任何安全问题,请通过电子邮件 inasyrov@ya.ru 联系我们,而不是使用问题跟踪器。

鸣谢

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件