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 迁移中的枚举列