我在 User 模型中有这个方法:
public function setDocAttribute($value){
    return $this->attributes['doc'] = $this->clear($value);
}
清除方法:
private function clear(?string $arg){
    if(empty($arg)){
        return '';
    }
    return str_replace(['.','-'], '', $arg);
}
然后我有一个类 User 用这个规则扩展 FormRequest :
class User extends FormRequest
{
    public function rules()
    {
        return [
            'doc' => (!empty($this->request->all()['id']) ? 'required|unique:users,doc,' . $this->request->all()['id'] : 'required|unique:users, doc'),
            ...
        ];
    }
}
但是规则的唯一部分不能正常工作,因为 doc 输入有 pontuation,所以它会比较例如“0043-23.00”与“00432300”及其不同,因此验证通过。要在用户表单中解决此问题,请使用 all() 方法清除 'doc' 输入:
public function all($keys = null)
{
    return $this->clear($this->request->all());
}
方法清除():
public function clear($inputs)
{
    $inputs['doc'] = str_replace(['.','-'],'', $this->request->all()['doc']);
    return $inputs;
}
但像这样显示一个错误:
“传递给 Illuminate\Validation\Factory::make() 的 TypeError Argument 1 必须是数组类型,给定 null”。
你知道为什么吗?
小智 1
也许你错过return了方法all。
您可以使用唯一的验证规则来进行更简单的检查:
public function rules()
{
    return [
        'doc' => [(new Unique('users', 'doc'))->ignore($this->request->get('id'))],
        // ...
    ];
}