Функция validate
Функция validate используется для проверки входящих данных в контроллерах Laravel.
Она доступна через объект запроса Illuminate\Http\Request. Первым параметром
передаётся массив правил валидации, вторым - массив пользовательских сообщений об ошибках,
третьим - массив пользовательских названий полей. В случае успешной проверки возвращается
массив проверенных данных, в случае ошибки автоматически генерируется ответ с перенаправлением
на предыдущую страницу.
Синтаксис
<?php
$validated = $request->validate($rules, $messages, $attributes);
?>
Пример
Давайте проверим запрос на создание статьи. Поле 'title' должно быть
обязательным и иметь длину не менее 3 символов, поле 'content' -
обязательным, а поле 'status' должно быть перечислено в списке допустимых значений:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ArticleController extends Controller
{
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required|string|min:3',
'content' => 'required|string',
'status' => 'required|in:draft,published',
]);
echo "Validation passed";
return $validated;
}
}
?>
Пример
Теперь добавим пользовательские сообщения об ошибках для более детального описания проблемы. Также зададим русские названия для полей:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ArticleController extends Controller
{
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required|string|min:3',
'content' => 'required|string',
'status' => 'required|in:draft,published',
], [
'title.required' => 'The title is required.',
'title.min' => 'The title must be at least 3 characters.',
'content.required' => 'The content is required.',
'status.required' => 'The status is required.',
'status.in' => 'The status must be either draft or published.',
], [
'title' => 'Title',
'content' => 'Content',
'status' => 'Status',
]);
echo "Validation passed";
return $validated;
}
}
?>
Пример
Если требуется выполнить сложную валидацию, условие проверки можно записать
в виде массива с использованием класса Rule. Например, проверим,
что email уникален в таблице пользователей:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
class UserController extends Controller
{
public function store(Request $request)
{
$validated = $request->validate([
'email' => [
'required',
'email',
Rule::unique('users', 'email'),
],
'password' => 'required|min:8|confirmed',
]);
echo "User validated";
return $validated;
}
}
?>
Результат выполнения кода при успешной валидации:
"User validated"
Смотрите также
-
класс
FormRequest,
который позволяет вынести логику проверки в отдельный класс -
класс
Validator,
который позволяет создавать валидатор вручную -
правило
required,
которое делает поле обязательным для заполнения -
правило
unique,
которое проверяет уникальность значения в таблице