lemax10/laravel-enums

Laravel 简单枚举实现。具有将 Eloquent 模型进行类型转换和通过语言文件进行标签翻译的能力。

v1.5.6 2024-03-18 13:18 UTC

README

此包仍在开发中,请勿使用

Laravel 枚举

此包基于 myclabs/php-enum 的枚举实现。

示例模型

use App\Enums\ExampleStatusEnum;
use Illuminate\Database\Eloquent\Model;
use LeMaX10\Enums\Traits\ModelEnums;

/**
 * Class ExampleModel
 * @package App
 */
class ExampleModel extends Model
{
    use ModelEnums;

    /**
     * @var array
     */
    protected $enums = [
        'status' => ExampleStatusEnum::class
    ];
}

示例状态枚举

use LeMaX10\Enums\Enum;

/**
 * Class ExampleStatusEnum
 * @package App\Enums
 */
final class ExampleStatusEnum extends Enum
{
    /**
     *
     */
    private const FOO = 'foo';

    /**
     *
     */
    private const BAR = 'bar';
}

示例可翻译枚举

use LeMaX10\Enums\Enum;
use LeMaX10\Enums\Contracts\Translatable;

/**
 * Class ExampleStatusEnum
 * @package App\Enums
 */
final class ExampleStatusEnum extends Enum implements Translatable
{
    /**
     *
     */
    private const FOO = 'foo';

    /**
     *
     */
    private const BAR = 'bar';
    
    /**
     * Translatable value
     * @return string
     */
    public function getTransValue(): string
    {
        return trans('enum.'. $this->value);
    }
}

请求验证规则

<?php


namespace App\Http\Requests;


use App\Enums\ExampleStatusEnum;
use Illuminate\Http\Request;

class ExampleRequest extends Request
{
    public function rules(): array
    {
        return [
            'status' => 'required|enum:'. ExampleStatusEnum::class
        ];
    }
}

<?php


namespace App\Http\Requests;


use App\Enums\ExampleStatusEnum;
use LeMaX10\Enums\Rules\EnumValue;
use Illuminate\Http\Request;

class ExampleRequest extends Request
{
    public function rules(): array
    {
        return [
            'status' => ['required', new EnumValue(ExampleStatusEnum::class)]
        ];
    }
}

<?php


namespace App\Http\Requests;


use App\Enums\ExampleStatusEnum;
use Illuminate\Http\Request;

class ExampleRequest extends Request
{
    public function rules(): array
    {
        return [
            'status' => ['required', ExampleStatusEnum::rule()]
        ];
    }
}

安装

您可以通过 composer 安装此包

composer require LeMaX10/laravel-enums

在 Laravel < 5.5 的 config/app.php 中注册服务提供者

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

迁移或同步值

您可以使用 sync 命令同步数据库中创建的枚举。

示例

  1. 创建枚举列或更改表中的现有列并运行
Schema::create('tableName', function (Blueprint $table): void {
            $table->increments('id');
            $table->enum('status', array_values(ExampleStatusEnum::toArray()));
        });
  1. 运行同步命令 php artisan db:enum:sync App\Models\ExampleModel

用法

$exampleModel = new ExampleModel;
$exampleModel->status = ExampleStatusEnum::FOO();
$exampleModel->save();
....


echo $exampleModel->status

文档

请参阅 myclabs/php-enum 的文档。

测试

您可以使用以下命令运行测试

composer test

变更日志

有关最近更改的更多信息,请参阅 变更日志

贡献

请参阅 贡献指南 以获取详细信息。

安全性

如果您发现任何安全问题,请通过电子邮件 rdlrobot@gmail.com 而不是使用问题跟踪器。

鸣谢

许可证

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