Laravel 5.6:如果字段存在且未更改,则跳过验证步骤。如果字段IS已更改,则为必需 - 但不是唯一的

问题描述 投票:0回答:2

我有管理员编辑员工表单的情况:添加员工时需要名字,姓氏和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大师可以帮助我的方式的帮助将非常感激!

php laravel laravel-5.6 laravel-validation
2个回答
0
投票

你可以做很多技巧来解决问题。但我只有两种方式..

第一个是:当您要编辑员工时,阻止发送您的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


0
投票

你必须没有验证非唯一字段的错误,可能你有错误的编辑形式,设置value属性输入像

<input type="text" value="{{ $employee->first_name }}" name="first_name">
© www.soinside.com 2019 - 2024. All rights reserved.