Проверить уникальность - Аргумент TypeError 1, переданный в Illuminate \ Validation \ Factory :: make (), должен относиться к типу array, задано значение null - PullRequest
5 голосов
/ 05 мая 2020

В модели 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'),
            ...
        ];
    }
}

Но уникальная часть правила не работает должным образом, потому что вход do c имеет pontuation, поэтому он будет сравнивать, например, «0043-23.00» с «00432300» и его другим, так что проверка проходит. Чтобы решить эту проблему, в форме пользователя запросите метод all () очистить ввод 'do c':

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;
}

Но как это показано ошибка:

«Аргумент TypeError 1, переданный в Illuminate \ Validation \ Factory :: make (), должен быть массива типов, задано значение null».

Знаете почему?

1 Ответ

1 голос
/ 05 мая 2020

Возможно, вы пропустили return в методе all.

И вы можете использовать уникальное правило проверки для более простой проверки:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...