В Laravel, управление данными запроса перед валидацией является важным шагом для обеспечения безопасности и целостности данных. Это позволяет вам очистить, преобразовать или изменить данные запроса перед тем, как они будут проверены на соответствие правилам валидации. Для этого Laravel предоставляет несколько подходов, включая использование middleware и классов форм запросов (Form Requests).

Использование Middleware для предварительной обработки данных

Шаг 1: Создание Middleware

Создайте middleware, который будет обрабатывать данные запроса перед валидацией. Это можно сделать с помощью команды Artisan:

php artisan make:middleware PreprocessRequestData

Это создаст новый файл middleware в app/Http/Middleware/PreprocessRequestData.php.

Шаг 2: Реализация Middleware

Откройте созданный файл middleware и реализуйте логику обработки данных запроса. Например, вы можете очистить определенные поля или преобразовать их в нужный формат.

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class PreprocessRequestData
{
    /**
     * Обработка входящего запроса.
     *
     * @param \Illuminate\Http\Request $request
     * @param \Closure $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        // Пример очистки поля 'email' от лишних пробелов
        $request->merge([
            'email' => trim($request->input('email')),
        ]);

        // Пример преобразования поля 'age' в целое число
        $request->merge([
            'age' => (int) $request->input('age'),
        ]);

        return $next($request);
    }
}

Шаг 3: Регистрация Middleware

Чтобы использовать ваш middleware, вам нужно зарегистрировать его. Это можно сделать в файле app/Http/Kernel.php в массиве $middleware.

protected $middleware = [
    // ...
    \App\Http\Middleware\PreprocessRequestData::class,
];

Или, если вы хотите применить middleware только к определенным маршрутам, вы можете добавить его в массив $routeMiddleware и затем применить его к конкретным маршрутам в файле маршрутов.

protected $routeMiddleware = [
    // ...
    'preprocess' => \App\Http\Middleware\PreprocessRequestData::class,
];

И затем в файле маршрутов:

Route::post('/submit', 'YourController@yourMethod')->middleware('preprocess');

Использование Form Request для Предварительной Обработки Данных

Шаг 1: Создание Form Request

Сначала создайте форму запроса, если у вас ее еще нет. Это можно сделать с помощью команды Artisan:

php artisan make:request YourFormRequest

Это создаст новый файл формы запроса в app/Http/Requests/YourFormRequest.php.

Шаг 2: Реализация prepareForValidation()

Откройте созданный файл формы запроса и реализуйте метод prepareForValidation(). В этом методе вы можете модифицировать данные запроса, например, очистить определенные поля или преобразовать их в нужный формат.

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class YourFormRequest extends FormRequest
{
    /**
     * Определите, авторизован ли пользователь для выполнения этого запроса.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Получите правила валидации, применяемые к запросу.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'email' => 'required|email',
            'age' => 'required|integer',
        ];
    }

    /**
     * Подготовка данных для валидации.
     *
     * @return void
     */
    protected function prepareForValidation()
    {
        // Пример очистки поля 'email' от лишних пробелов
        $this->merge([
            'email' => trim($this->input('email')),
        ]);

        // Пример преобразования поля 'age' в целое число
        $this->merge([
            'age' => (int) $this->input('age'),
        ]);
    }
}

Шаг 3: Использование Form Request

Чтобы использовать вашу форму запроса, вам нужно указать ее в методе контроллера, который обрабатывает запрос. Laravel автоматически применит правила валидации и метод prepareForValidation() к входящему запросу.

public function store(YourFormRequest $request)
{
    // Данные запроса уже были проверены и подготовлены
    // Вы можете безопасно использовать их для сохранения в базе данных
}

Заключение

Использование middleware и классов форм запросов в Laravel предоставляет удобные и мощные способы предварительной обработки данных запроса перед валидацией. Это позволяет вам гибко управлять входящими данными, обеспечивая их безопасность и целостность, и делает ваш код более чистым и организованным. Выбор между этими двумя подходами зависит от конкретных требований вашего приложения и предпочтений в структуре кода.