Столкнулся с интересно задачей — валидировать разделенные запятой значения. Comma-separated данные приходят в одном поле — поискав варианты решения нашел оптимальное, о котором и хочу рассказать.
В классе Request и всех его потомках есть интересный метод merge.
Этот метод позволяет изменить полученные данные. Например, до валидации.
К примеру, в ситуации, когда Вам приходит список id, разделенных запятой, которые надо проверить на наличие в какой-то таблице Вы можете до валидации поступить так:
1 2 3 |
$request->merge([ 'employees' => explode(',', $this->get('employees')) ]); |
При этом в правилах валидации уже подразумевать, что мы получили массив, так как explode возвращает именно его. Пример правил валидации для указанных выше условий:
1 2 3 |
'employees.*' => [ 'exists:employees,id' ], |
Также, если Вы используете отдельный класс-Request — очень удобно использовать метод prepareForValidation. Он будет вызван до непосредственно проверки данных и merge можно провести в нём. Это будет иметь такой вид:
1 2 3 4 5 6 7 8 9 |
/** * @inheritDoc */ protected function prepareForValidation() { $this->merge([ 'employees' => explode(',', $this->get('employees')) ]); } |
Надеюсь статья была полезной для Вас. Если остались вопросы — го в комменты)