Laravel 5.1结合表单请求和验证器

时间:2015-08-14 14:20:29

标签: php validation laravel-5

我正在使用表单请求类。工作正常:

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'
        ];
   }
}

但是现在,我必须添加更复杂的规则,例如与Validator结合使用。在我的EventFormRequest类的新rules()方法下面:

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 request()方法中,我不能将应用的规则作为数组(参见示例1)从验证器返回,而只返回message()。

我从这里受到启发:http://laravel.com/docs/5.1/validation#conditionally-adding-rules

1 个答案:

答案 0 :(得分:2)

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;
    }
}