Laravel,如何验证枚举列

问题描述 投票:0回答:1

我正在尝试在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'

然后我使用以下代码创建我的Validator:

$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 eloquent laravel-validation
1个回答
1
投票

通常枚举将在数据库中设置,并且前端将是下拉列表

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

但是,您可以尝试此解决方案

'concert_type' => 'in:public,private', //公共或私人价值观

© www.soinside.com 2019 - 2024. All rights reserved.