【问题标题】:Validate Unique - TypeError Argument 1 passed to Illuminate\Validation\Factory::make() must be of the type array, null givenValidate Unique - 传递给 Illuminate\Validation\Factory::make() 的 TypeError 参数 1 必须是数组类型,给定 null
【发布时间】:2020-05-05 10:14:36
【问题描述】:

我在用户模型中有这个方法:

public function setDocAttribute($value){
    return $this->attributes['doc'] = $this->clear($value);
}

清除方法:

private function clear(?string $arg){

    if(empty($arg)){
        return '';
    }
    return str_replace(['.','-'], '', $arg);
}

然后我有一个使用此规则扩展 FormRequest 的类 User:

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() 方法清除“文档”输入:

public function all($keys = null)
{
    return $this->clear($this->request->all());
}

方法 clear():

public function clear($inputs)
{
    $inputs['doc'] = str_replace(['.','-'],'', $this->request->all()['doc']);
    return $inputs;
}

但是像这样显示一个错误:

"类型错误 传递给 Illuminate\Validation\Factory::make() 的参数 1 必须是数组类型,给定 null”。

你知道为什么吗?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    也许您在all 方法中错过了return

    您可以使用唯一的验证规则进行更简单的检查:

    public function rules()
    {
        return [
            'doc' => [(new Unique('users', 'doc'))->ignore($this->request->get('id'))],
            // ...
        ];
    }
    
    

    【讨论】:

    • 谢谢,但返回同样的错误,如 " return $inputs['doc'] = str_replace(['.','-'],'', $this->request->all( )['doc']);".
    • 但是你应该返回$inputs数组。
    • 谢谢,但返回 $inputs 也有同样的问题。
    猜你喜欢
    • 2021-01-15
    • 1970-01-01
    • 2019-06-17
    • 2018-05-28
    • 2018-04-19
    • 2019-08-23
    • 2021-04-02
    • 1970-01-01
    • 2019-03-04
    相关资源
    最近更新 更多