Laravel最佳实践:使用预定义字段进行验证

时间:2016-08-18 11:32:26

标签: validation laravel laravel-5

我是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?什么是最好的可能性?

1 个答案:

答案 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');

您还可以拥有一个包含通用规则的数组,并根据场景添加新规则。