Метод validated
Метод validated применяется к экземпляру класса Validator и возвращает массив проверенных данных. Этот метод обычно вызывается после успешной валидации, когда метод passes вернул true или метод fails вернул false. Возвращаемый массив содержит только те поля, которые присутствуют в правилах валидации, отфильтрованные от лишних данных.
Синтаксис
<?php
$validator->validated();
?>
Пример
Давайте создадим валидатор для данных пользователя и получим только проверенные поля:
<?php
use Illuminate\Support\Facades\Validator;
$data = [
'name' => 'John',
'email' => 'john@example.com',
'age' => '25',
'role' => 'admin'
];
$rules = [
'name' => 'required|string|max:255',
'email' => 'required|email',
'age' => 'nullable|integer|min:18'
];
$validator = Validator::make($data, $rules);
if ($validator->passes()) {
$validatedData = $validator->validated();
print_r($validatedData);
}
?>
Результат выполнения кода:
[
'name' => 'John',
'email' => 'john@example.com',
'age' => '25'
]
Обратите внимание, что поле role отсутствует в результате, так как оно не было указано в правилах валидации, даже несмотря на то, что присутствовало в исходных данных.
Пример
Метод validated также доступен в классах FormRequest. Рассмотрим использование в контроллере:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UserRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users,email',
'password' => 'required|string|min:8|confirmed'
];
}
}
?>
<?php
namespace App\Http\Controllers;
use App\Http\Requests\UserRequest;
class UserController extends Controller
{
public function store(UserRequest $request)
{
$validated = $request->validated();
// Здесь метод validated работает аналогично
echo "User created with data:\n";
print_r($validated);
// Создание пользователя с проверенными данными
// User::create($validated);
}
}
?>
Результат выполнения кода при корректных данных:
"User created with data:
['name' => 'John', 'email' => 'john@example.com', 'password' => 'secret123']"
Пример
Важно отметить, что метод validated возвращает только те поля, которые прошли валидацию. Поля с ошибками не включаются в результат:
<?php
use Illuminate\Support\Facades\Validator;
$data = [
'name' => 'John Doe',
'email' => 'invalid-email',
'phone' => '123456789',
'address' => 'Main St'
];
$rules = [
'name' => 'required|string',
'email' => 'required|email',
'phone' => 'nullable|numeric',
'address' => 'nullable|string'
];
$validator = Validator::make($data, $rules);
if ($validator->fails()) {
$validatedData = $validator->validated();
echo "Validated data:\n";
print_r($validatedData);
echo "\nErrors:\n";
print_r($validator->errors()->all());
}
?>
Результат выполнения кода:
"Validated data:
['name' => 'John Doe', 'phone' => '123456789', 'address' => 'Main St']
Errors:
['The email field must be a valid email address.']"
Как видно из примера, поле email не попадает в результат, так как его валидация не прошла, в то время как остальные корректные поля включаются в массив проверенных данных.