Проверка имени пользователя в laravel - PullRequest
0 голосов
/ 12 июля 2020
public function store()
{
$this->validate(request(),[
// Third try
‘username’ => ‘required|string|regex:/\w*$/|max:255|unique:users’,
// Second try
‘username’ => ‘required|string|regex:/^[A-Za-z0-9]+(?:[_-][A-Za-z0-9]+)*$/|max:255|unique:users‘,
// First try 
’username’ => ‘required|string|max:255’,
]);
}

Поле имени пользователя работало хорошо с включенными числами (при первой попытке), но потом я забыл включить «unique: users», затем форма начала отклонять его (перенаправляет обратно с полем имени пользователя, подчеркнутым красной красной линией) . Кроме того, я несколько раз использовал «alpha_dash» laravel, но продолжаю отклонять ввод. Моя цель - сочетание букв, цифр, подчеркиваний и тире.

Некоторые, пожалуйста, помогите мне сделать это правильно. Спасибо

Ответы [ 3 ]

2 голосов
/ 12 июля 2020

Вам не хватает параметров. Это должно быть unique:table,column,except,primarykeyname

Последние два параметра необязательны. В вашем случае ваша проверка для сохранения пользователя должна выглядеть так:

'username' => 'required|string|regex:/\w*$/|max:255|unique:users,username',

Таким образом, вы говорите, что в базе данных не должно быть пользователя с таким же именем пользователя.

Однако, если вы хотите обновить пользователя, вы должны добавить идентификатор пользователя в качестве третьего параметра, чтобы проверка уникального имени пользователя игнорировала пользователя, которого вы пытаетесь обновить.

'username' => 'required|string|regex:/\w*$/|max:255|unique:users,username,'.$user->id,

Если ваш первичный ключ без имени id, вы добавляете его имя в качестве четвертого параметра:

'username' => 'required|string|regex:/\w*$/|max:255|unique:users,username,'.$user->userId.',userId',
1 голос
/ 12 июля 2020
 protected function validator(array $data)
    {
        return Validator::make($data, [
            'username' => ['required', 'string', 'max:255'],
        ]);
    }
1 голос
/ 12 июля 2020

При использовании шаблона regex может потребоваться указать правила в массиве вместо использования разделителей каналов , особенно если регулярное выражение содержит символ pipe :

public function store(Request $request)
{
    $validatedData = $request->validate([
        'username' => 
          array(
            'required',
            'unique:users,username',
            'max:255',
            'regex:/\w*$/'
          )
    ]);
}
...