Класс Validator
Класс Validator используется для проверки данных на соответствие заданным правилам. Входные данные передаются первым параметром в виде ассоциативного массива, вторым параметром - массив правил валидации. Третьим параметром можно передать собственные сообщения об ошибках. Метод возвращает экземпляр валидатора, который позволяет проверить данные и получить ошибки.
Синтаксис
<?php
use Illuminate\Support\Facades\Validator;
$validator = Validator::make($data, $rules, $messages);
?>
Пример
Давайте проверим данные пользователя на соответствие основным правилам:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class UserController extends Controller
{
public function store(Request $request)
{
$data = $request->all();
$rules = [
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users,email',
'age' => 'required|integer|min:18',
];
$validator = Validator::make($data, $rules);
if ($validator->fails()) {
return $validator->errors();
}
return 'Validation passed';
}
}
?>
Результат выполнения кода при невалидных данных:
{
"name": ["The name field is required."],
"email": ["The email must be a valid email address."]
}
Пример
Проверим данные с использованием метода validate, который автоматически выбрасывает исключение при ошибке:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class ArticleController extends Controller
{
public function create(Request $request)
{
$data = $request->all();
$rules = [
'title' => 'required|string|min:5',
'content' => 'required|string|min:10',
'status' => 'in:draft,published,archived',
];
$res = Validator::make($data, $rules)->validate();
return 'Article validated successfully';
}
}
?>
Результат выполнения кода при валидных данных:
"Article validated successfully"
Пример
Используем собственные сообщения об ошибках для более понятных пользователю подсказок:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class ProfileController extends Controller
{
public function update(Request $request)
{
$data = $request->all();
$rules = [
'phone' => 'required|numeric|digits:10',
'password' => 'required|confirmed|min:8',
];
$messages = [
'phone.required' => 'Phone number is required.',
'phone.numeric' => 'Phone must contain only numbers.',
'phone.digits' => 'Phone must be exactly 10 digits.',
'password.confirmed' => 'Password confirmation does not match.',
];
$validator = Validator::make($data, $rules, $messages);
if ($validator->fails()) {
return $validator->errors()->all();
}
return 'Profile updated';
}
}
?>
Результат выполнения кода при несовпадении паролей:
["Password confirmation does not match."]
Пример
Проверим массив данных с вложенными полями с использованием точечной нотации:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class OrderController extends Controller
{
public function store(Request $request)
{
$data = $request->all();
$rules = [
'customer.name' => 'required|string|max:100',
'customer.email' => 'required|email',
'items.*.product_id' => 'required|integer|exists:products,id',
'items.*.quantity' => 'required|integer|min:1|max:99',
];
$res = Validator::make($data, $rules);
if ($res->fails()) {
return $res->errors();
}
return 'Order created';
}
}
?>
Результат выполнения кода при отсутствии обязательных полей:
{
"customer.name": ["The customer.name field is required."],
"customer.email": ["The customer.email field is required."]
}
Смотрите также
-
метод
fails,
который проверяет, прошла ли валидация -
метод
errors,
который возвращает все ошибки валидации -
метод
validated,
который возвращает отфильтрованные валидные данные -
класс
FormRequest,
который создаёт отдельные классы для валидации