Я использую класс запросов форм. Работа хорошо:Laravel 5.1 Запрос формы и валидатор формы
class EventFormRequest extends FormRequest
{
public function rules()
{
return [
'event' => 'required|min:10|max:255',
'event_description' => 'required|min:3|max:255',
'url' => 'url',
'date' => 'required|date',
'start_time' => 'required',
'location.street' => 'required|max:255',
'location.house_number' => 'required|min:1|max:5',
'location.place' => 'required|max:255'
];
}
}
Но теперь, я должен добавить правила complexer, например, в сочетании с валидатора. Метод Ниже новые правила() мой класс EventFormRequest:
public function rules()
{
$v = \Validator::make($this->request->all(),
[
'event' => 'required|min:10|max:255',
'event_description' => 'required|min:3|max:255',
'url' => 'url',
'date' => 'required|date',
'start_time' => 'required',
'location.street' => 'required|max:255',
'location.house_number' => 'required|min:1|max:5',
'location.place' => 'required|max:255'
]);
$v->sometimes('category_id', 'required|numeric', function($input) {
return $input->event_type == 'known';
});
return ($v->fails() ? $v->messages() : []); // validator validates the rules, but returns the messages
}
Вы видите, category_id требуется, если тип события «известен». В методе правил request() формы я не могу вернуть прикладные правила в виде массива (см. Пример 1) из валидатора, но только из сообщений().
Я вдохновляюсь здесь: http://laravel.com/docs/5.1/validation#conditionally-adding-rules