【问题标题】:Laravel 5.6: Skip validation step if field exists and isn't changed. If field IS changed it is Required - but not uniqueLaravel 5.6:如果字段存在且未更改,则跳过验证步骤。如果字段已更改,则为必填项 - 但不是唯一的
【发布时间】:2019-07-23 02:49:31
【问题描述】:

我遇到管理员编辑员工表单的情况:添加员工时需要名字、姓氏和 SSN。那里没有问题。我有一个问题是在编辑表格时。我验证 SSN 没有问题,因为它是一个唯一字段。

'ssn_edit' => 'required|unique:employees,ssn,' . $id

但我确实有一个问题是非唯一字段。当字段不唯一时,我不知道如何将验证设置为按 ID 跳过。这是 FormRequest 的整个规则部分:

public function rules()
{
    $id = $this->input('employee_id');
    return [
        'first_name' => 'required',
        'last_name' => 'required',
        'ssn_edit' => 'required|unique:employees,ssn,' . $id
    ];
}

显然 - 无论字段是否填充,这都会在 first_name 和 last_name 上引发验证错误。 非常感谢你们中的一些 Laravel 大师可以帮助我!

【问题讨论】:

  • 当您编辑员工时,first_name 和 last_name 字段不会出现?
  • 如果值没有改变,Laravel 会这样看。

标签: php laravel laravel-5.6 laravel-validation


【解决方案1】:

有很多技巧可以解决这个问题。但我只有两种方法..

第一个是:当你想编辑员工时,防止发送你的 ssn_edit 值

示例:

<input type="text" value="{{ isset($employee) ? $employee->ssn_edit : old('ssn_edit') }}" @isset($employee) disabled @endisset name="ssn_edit">

public function rules()
{
    $id = $this->input('employee_id');
    return [
        'first_name' => 'required',
        'last_name' => 'required',
        'ssn_edit' => 'required|sometimes|unique:employees,ssn,' . $id
    ];
}

第二个是:在验证员工之前检查您的方法。是POST 还是PUT,如果是PUT,请不要在验证中添加唯一规则。

结论:无论您是编辑还是添加新员工,每次调用验证时验证都会起作用。 #CMIIW

【讨论】:

    【解决方案2】:

    验证非唯一字段一定不能出错,可能是你的编辑表单错误,设置value属性为input like

    <input type="text" value="{{ $employee->first_name }}" name="first_name">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-22
      • 1970-01-01
      相关资源
      最近更新 更多