Laravel,如何验证枚举列

Jac*_*pia 1 laravel eloquent laravel-validation

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

\n\n
/**\n * Returns the rules and messages for validating this creation\n */\npublic static function ValidationBook($except = [], $append = []) {\n    $book = [\'rules\' => [], \'messages\' => []];\n    $arr = config(\'constants.publication_statuses\');\n    $arrKeys = array_keys($arr);\n    $book[\'rules\'] = [\n        \'concert.title\' => \'required|string\',\n        \'concert.user_id\' => \'required|exists:users,id\',\n        \'concert.type\' => [\n            \'required\',\n            Rule::in([\'public\', \'private\']),\n        ],\n        \'concert.status\' => \'required\',\n        \'concert.closes_on\' => \'nullable\'\n    ];\n    $book[\'messages\'] = [\n\n        \'concert.title.required\' => \'El t\xc3\xadtulo es requerido.\',\n        \'concert.title.string\' => \'El t\xc3\xadtulo debe ser un texto\',\n\n        \'concert.user_id.exists\' => \'Se debe ingresar un usuario v\xc3\xa1lido.\',\n\n        \'concert.type.required\' => \'El tipo es requerido.\',\n\n        \'concert.status.required\' => \'El status es requerido.\',\n    ];\n    if (!empty($except)) {\n        $except = array_flip($except);\n        $book[\'rules\'] = array_diff_key($book[\'rules\'], $except);\n    }\n    if (!empty($append)) {\n        $book = array_merge_recursive($book, $append);\n    }\n    return $book;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

枚举列就是type列。我也尝试过这样做\'concert.type\' => \'required|in:public,private\'

\n\n

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

\n\n
$vb = Concert::ValidationBook($except, $append);\n$validator = Validator::make($data, $vb[\'rules\'], $vb[\'messages\']);\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
{\n    "concert": {\n        "title": "Title",\n        "type": "novalidtype",\n        "status": "open"\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

提前致谢

\n

小智 5

通常枚举会像数据库一样设置,前端将是一个下拉列表

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

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

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