Laravel,如何验证枚举列

Posted

技术标签:

【中文标题】Laravel,如何验证枚举列【英文标题】:Laravel, how to validate an enum column 【发布时间】:2019-08-17 11:31:44 【问题描述】:

我正在尝试在 laravel 中进行枚举列验证。这是我的验证器的代码。

/**
 * Returns the rules and messages for validating this creation
 */
public static function ValidationBook($except = [], $append = []) 
    $book = ['rules' => [], 'messages' => []];
    $arr = config('constants.publication_statuses');
    $arrKeys = array_keys($arr);
    $book['rules'] = [
        'concert.title' => 'required|string',
        'concert.user_id' => 'required|exists:users,id',
        'concert.type' => [
            'required',
            Rule::in(['public', 'private']),
        ],
        'concert.status' => 'required',
        'concert.closes_on' => 'nullable'
    ];
    $book['messages'] = [

        'concert.title.required' => 'El título es requerido.',
        'concert.title.string' => 'El título debe ser un texto',

        'concert.user_id.exists' => 'Se debe ingresar un usuario válido.',

        'concert.type.required' => 'El tipo es requerido.',

        'concert.status.required' => 'El status es requerido.',
    ];
    if (!empty($except)) 
        $except = array_flip($except);
        $book['rules'] = array_diff_key($book['rules'], $except);
    
    if (!empty($append)) 
        $book = array_merge_recursive($book, $append);
    
    return $book;

枚举列是type 列。我也试过'concert.type' => 'required|in:public,private'

然后我使用以下代码创建我的验证器:

$vb = Concert::ValidationBook($except, $append);
$validator = Validator::make($data, $vb['rules'], $vb['messages']);

但由于某种原因,当我通过 Postman 发送帖子时,我收到了"detail": "Undefined index: concert.type"。 即使我的数据是:


    "concert": 
        "title": "Title",
        "type": "novalidtype",
        "status": "open"
    

提前致谢

【问题讨论】:

这能回答你的问题吗? Laravel IN Validation or Validation by ENUM Values 【参考方案1】:

一般enum会在数据库中设置,前端是一个下拉列表

$table->enum('concert_type', ['public', 'private']);

不过你可以试试这个解决方案

'concert_type' => 'in:public,private', // 公共或私有值

【讨论】:

以上是关于Laravel,如何验证枚举列的主要内容,如果未能解决你的问题,请参考以下文章

如何根据“枚举”列获得分类的 laravel 雄辩结果并在一页中显示?

使用 PostgreSQL 更新 Laravel 迁移中的枚举列

枚举列laravel 8上的多项选择

如何使唯一数组的自定义验证规则依赖于其他字段 laravel

Laravel 验证:存在附加列条件 - 自定义验证规则

如何在 Laravel 或其他框架中正确编写表单?