【问题标题】:Laravel best practices: validations with predefined fieldsLaravel 最佳实践:使用预定义字段进行验证
【发布时间】:2016-08-18 20:28:23
【问题描述】:

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

【问题讨论】:

    标签: validation laravel laravel-5


    【解决方案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');

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

    【讨论】:

      猜你喜欢
      • 2013-04-14
      • 2015-11-01
      • 2020-06-14
      • 2020-05-22
      • 2018-02-22
      • 2011-01-11
      • 1970-01-01
      • 2021-10-30
      • 2015-10-20
      相关资源
      最近更新 更多