2015-08-14 2 views
0

Я использую класс запросов форм. Работа хорошо: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

ответ

1
class EventFormRequest extends FormRequest 
{ 
    public function rules() 
    { 
     $rules = [ 
      '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' 
     ]; 

     if ($this->request->get('event_type') == 'known') { 
      $rules['category_id'] = 'required|numeric'; 
     } 

     return $rules; 
    } 
} 
Смежные вопросы