Laravel. Как изменить данные запроса перед валидацией?


Столкнулся с интересно задачей — валидировать разделенные запятой значения. Comma-separated данные приходят в одном поле — поискав варианты решения нашел оптимальное, о котором и хочу рассказать.

В классе Request и всех его потомках есть интересный метод merge.

Этот метод позволяет изменить полученные данные. Например, до валидации.

К примеру, в ситуации, когда Вам приходит список id, разделенных запятой, которые надо проверить на наличие в какой-то таблице Вы можете до валидации поступить так:

$request->merge([
    'employees'  =>  explode(',', $this->get('employees'))
]);

При этом в правилах валидации уже подразумевать, что мы получили массив, так как explode возвращает именно его. Пример правил валидации для указанных выше условий:

'employees.*'     =>  [
    'exists:employees,id'
],

Также, если Вы используете отдельный класс-Request — очень удобно использовать метод prepareForValidation. Он будет вызван до непосредственно проверки данных и merge можно провести в нём. Это будет иметь такой вид:

/**
* @inheritDoc
*/
protected function prepareForValidation()
{
    $this->merge([
        'employees'  =>  explode(',', $this->get('employees'))
    ]);
}

Надеюсь статья была полезной для Вас. Если остались вопросы — го в комменты)

,

Один комментарий на «“Laravel. Как изменить данные запроса перед валидацией?”»

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *