Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Игнорируется правило валидации Laravel

Default User Ученик (82), на голосовании 1 год назад
Есть метод контроллера, который проверяет данные формы редактирования профиля. В нем прописана валидация для пароля, но правило "alpha_num" просто игнорируется и пользователь может создать пароль, не состоящий из букв и цифр, хотя правило для длины работает
сам код:
 $validated = $request->validate([ 
'old_pass' => ['required', 'min:8', 'max:128', 'alpha_num'],
'new_pass' => ['required', 'min:8', 'max:128', 'alpha_num'],
'pass_submit' => ['required', 'min:8', 'max:128', 'alpha_num'],
]);
dump($validated);

if (Hash::check($validated['old_pass'], Auth::user()->password)) {

if ($validated['new_pass'] == $validated['pass_submit']) {

DB::table('users')
->where('id', Auth::user()->id)
->update([
'name' => $update_info['name'],
'age' => $update_info['age'],
'description' => $update_info['description'],
'password' => Hash::make($update_info['new_pass']),
]);
echo "Password updated!";
Голосование за лучший ответ
Bainappuru Мастер (1062) 1 год назад
```
public function updateProfile(Request $request)
{
$this->validate($request, [
'name' => 'required|string|max:255',
'password' => 'nullable|string|min:8|alpha_num|confirmed',
]);

// остальной код для обновления профиля
}
```

Возможно, проблема в том, что валидация не применяется к полю "password", так как оно необязательно для заполнения (nullable). Если пользователь оставляет поле пароля пустым, валидация не будет выполняться, и ошибки не будут отображаться.

Чтобы исправить это, можно добавить дополнительное правило "required_if", которое будет требовать заполнения поля пароля только в том случае, если пользователь указал новый пароль:

```
$this->validate($request, [
'name' => 'required|string|max:255',
'password' => 'nullable|string|min:8|alpha_num|confirmed|required_if:new_password,1',
]);
```

Здесь мы добавили правило "required_if:new_password,1", которое говорит о том, что поле пароля обязательно для заполнения, если значение поля "new_password" равно 1 (то есть пользователь указал новый пароль). Теперь валидация для правила "alpha_num" должна работать без проблем.
EVK IT Сервис К Мыслитель (5226) 1 год назад
 'password' => [ 
'required',
'min:6',
'regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\x])(?=.*[!$#%]).*$/',
'confirmed'
]
Похожие вопросы