РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
578 of 1392 menu

Правило confirmed

Правило confirmed проверяет, что значение проверяемого поля совпадает со значением другого поля, название которого формируется добавлением суффикса _confirmation к имени проверяемого поля. Например, для поля password будет выполняться поиск поля password_confirmation, для поля email - email_confirmation. Если поле с суффиксом _confirmation отсутствует в данных или его значение не совпадает с проверяемым полем, валидация не проходит. Данное правило активно используется при создании форм регистрации, смене пароля или при подтверждении email-адреса.

Синтаксис

Для использования правила достаточно передать строку confirmed в массив правил:

<?php use Illuminate\Support\Facades\Validator; $rules = [ 'password' => 'required|confirmed|min:8', ]; ?>

Альтернативный синтаксис через массив:

<?php use Illuminate\Support\Facades\Validator; $rules = [ 'password' => ['required', 'confirmed', 'min:8'], ]; ?>

Правило confirmed автоматически ожидает наличие поля с именем {поле}_confirmation в массиве данных для валидации.

Пример

Создадим валидацию для регистрации пользователя с подтверждением пароля:

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Hash; use App\Models\User; class RegisterController extends Controller { public function register(Request $request) { $validator = Validator::make($request->all(), [ 'name' => 'required|string|max:255', 'email' => 'required|email|unique:users', 'password' => 'required|confirmed|min:8', ]); if ($validator->fails()) { return redirect()->back()->withErrors($validator)->withInput(); } $user = User::create([ 'name' => $request->name, 'email' => $request->email, 'password' => Hash::make($request->password), ]); return redirect()->route('home')->with('success', 'User registered successfully'); } } ?>

Пример HTML-формы для отправки данных:

<form method="POST" action="/register"> @csrf <input type="text" name="name" placeholder="Name"> <input type="email" name="email" placeholder="Email"> <input type="password" name="password" placeholder="Password"> <input type="password" name="password_confirmation" placeholder="Confirm Password"> <button type="submit">Register</button> </form>

Результат выполнения кода при несовпадающих паролях:

"Validation failed: The password confirmation does not match."

Результат выполнения кода при успешной валидации:

"User registered successfully"

Пример

Использование правила confirmed в Form Request для изменения пароля:

<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class UpdatePasswordRequest extends FormRequest { public function authorize(): bool { return true; } public function rules(): array { return [ 'current_password' => 'required|current_password', 'new_password' => 'required|confirmed|min:8', 'new_password_confirmation' => 'required', ]; } public function messages(): array { return [ 'new_password.confirmed' => 'The new password confirmation does not match.', 'new_password.min' => 'The new password must be at least 8 characters.', ]; } } ?>

Использование созданного Form Request в контроллере:

<?php namespace App\Http\Controllers; use App\Http\Requests\UpdatePasswordRequest; use Illuminate\Support\Facades\Hash; class ProfileController extends Controller { public function updatePassword(UpdatePasswordRequest $request) { $user = auth()->user(); $user->password = Hash::make($request->new_password); $user->save(); return redirect()->back()->with('success', 'Password updated successfully'); } } ?>

Пример Blade-шаблона для формы смены пароля:

<form method="POST" action="{{ route('password.update') }}"> @csrf @method('PUT') <input type="password" name="current_password" placeholder="Current Password"> <input type="password" name="new_password" placeholder="New Password"> <input type="password" name="new_password_confirmation" placeholder="Confirm New Password"> <button type="submit">Change Password</button> @if ($errors->any()) <div> @foreach ($errors->all() as $error) <p>{{ $error }}</p> @endforeach </div> @endif </form>

Пример

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

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Validator; class EmailController extends Controller { public function confirmEmail(Request $request) { $validator = Validator::make($request->all(), [ 'email' => 'required|email|confirmed', 'email_confirmation' => 'required|email', ]); if ($validator->fails()) { return response()->json([ 'status' => 'error', 'errors' => $validator->errors() ], 422); } return response()->json([ 'status' => 'success', 'message' => 'Email confirmed successfully' ]); } } ?>

Пример AJAX-запроса для отправки данных на сервер:

<script> fetch('/confirm-email', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRF-TOKEN': '{{ csrf_token() }}' }, body: JSON.stringify({ email: 'user@example.com', email_confirmation: 'user@example.com' }) }) .then(response => response.json()) .then(data => console.log(data)); </script>

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

"Email confirmed successfully"

Результат выполнения кода при несовпадающих email-адресах:

"The email confirmation does not match."

Смотрите также

  • правило required,
    которое делает поле обязательным для заполнения
  • правило same,
    которое проверяет совпадение значения с другим полем
  • правило min,
    которое устанавливает минимальное значение для поля
  • правило current_password,
    которое проверяет текущий пароль пользователя
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить