Метод prepareForValidation
Метод prepareForValidation вызывается автоматически
перед применением правил валидации к данным запроса.
Он позволяет подготовить входные данные, например,
преобразовать строки в числа, обрезать пробелы или
изменить формат полей. Метод не принимает параметров
и не возвращает значения, но может модифицировать
свойство $this->merge или использовать
свойство $this->replace для изменения
входных данных. Обычно используется для нормализации
данных перед валидацией.
Синтаксис
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class PostRequest extends FormRequest
{
protected function prepareForValidation(): void
{
$this->merge([
'field' => $this->input('field')
]);
}
}
?>
Пример
Давайте подготовим данные для валидации, преобразуя
строковое значение 'age' в целое число:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UserRequest extends FormRequest
{
protected function prepareForValidation(): void
{
$this->merge([
'age' => (int) $this->input('age')
]);
}
public function rules(): array
{
return [
'age' => 'required|integer|min:18'
];
}
}
?>
Контроллер, использующий этот запрос:
<?php
namespace App\Http\Controllers;
use App\Http\Requests\UserRequest;
class UserController extends Controller
{
public function store(UserRequest $request)
{
$res = 'User validated successfully';
echo $res;
}
}
?>
Пример
Давайте обрежем пробелы во всех полях запроса
и преобразуем пустые строки в null:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class ProfileRequest extends FormRequest
{
protected function prepareForValidation(): void
{
$data = $this->all();
foreach ($data as $key => $value) {
if (is_string($value)) {
$data[$key] = trim($value);
if ($data[$key] === '') {
$data[$key] = null;
}
}
}
$this->replace($data);
}
public function rules(): array
{
return [
'name' => 'required|string|max:255',
'email' => 'required|email',
'phone' => 'nullable|string'
];
}
}
?>
Результат выполнения подготовки данных:
[
'name' => 'John Doe',
'email' => 'john@example.com',
'phone' => null
]
Пример
Давайте объединим поля 'first_name'
и 'last_name' в одно поле 'full_name'
перед валидацией:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class NameRequest extends FormRequest
{
protected function prepareForValidation(): void
{
$firstName = $this->input('first_name');
$lastName = $this->input('last_name');
$this->merge([
'full_name' => trim($firstName . ' ' . $lastName)
]);
}
public function rules(): array
{
return [
'first_name' => 'required|string',
'last_name' => 'required|string',
'full_name' => 'required|string|max:255'
];
}
}
?>
Результат выполнения подготовки данных:
[
'first_name' => 'John',
'last_name' => 'Doe',
'full_name' => 'John Doe'
]
Смотрите также
-
метод
rules,
который определяет правила валидации -
метод
messages,
который определяет сообщения об ошибках -
метод
authorize,
который определяет авторизацию запроса -
метод
withValidator,
который позволяет модифицировать валидатор после его создания