В модели 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».
Знаете почему?