我是Laravel的新手,我开始了一个小项目来学习它。为此我有一个问题,并寻找一个解决这个问题的好方法。
我已经在文档中编写了一个验证方法,并使用此函数验证我的表单。
public static function validate($object, $request) {
$object->validate($request, [
'type' => 'in:foo,bar',
'name' => 'required',
'description' => 'required',
]);
}
$obj = new Job();
$obj->validate($this, $request);
[...]
$obj->save();
这很好用,但是有些模型有字段,这些字段是必需的,但主要由我在控制器中预定义。例如,当我为当前用户创建一个带有user_id字段的条目时。
$obj = new Obj();
$obj->user_id = Auth::user()->id;
$obj->validate($this, $request);
[...]
$obj->save();
user_id不是$ request对象的一部分,因此不会被验证。
所以我可以删除验证中的required
或定义2个不同的验证函数。还有其他可能性吗?是否可以将字段添加到$request
?什么是最好的可能性?
答案 0 :(得分:1)
我建议您在验证方法中使用验证方案,如下所示:
public function validate($input, $scenario)
{
switch ($scenario)
{
case 'create':
case 'update':
$rules = [
'first_name' => 'required',
'last_name' => 'required',
'email' => 'required|email|email_available'
];
break;
case 'change_password':
$rules = [
'current_password' => 'required|check_current_password',
'new_password' => 'required|min:6|confirmed'
];
break;
}
return Validator::make($input, $rules);
}
用法:$object->validate($input, 'create');
您还可以拥有一个包含通用规则的数组,并根据场景添加新规则。