Laravel 5:成功验证请求功能

时间:2015-06-22 21:26:16

标签: laravel-5 laravel-validation

在laravel 5中,我们现在可以使用Request类进行输入验证,如下所示:

    public function store(StoreItemRequest $request)
    {
        $item = Item::create($request->all());
        return 'success';
    }

验证失败后,我可以通过response类中的Request函数获取错误:

    public function response(array $errors) {
       return response()->json(['errors' => $errors]);
    }

但如果验证成功怎么办?有没有像这样自动触发的功能:

    public function ????(){
         if($request->ajax())
           return response()->json(['success' => true]);
    }

注意:必须如果请求是ajax,则函数store的内容不会被执行(就像验证失败时不会执行一样)。 / p>

2 个答案:

答案 0 :(得分:1)

是的,我在validate中找到了ValidateWhenResolvedTrait方法,您可以在表单请求类中覆盖它;

public function validate(){

     $instance = $this->getValidatorInstance();

      if($this->passesAuthorization()){
             $this->failedAuthorization();
       }elseif(!$instance->passes()){
              $this->failedValidation($instance);
      }elseif( $instance->passes()){

         if($this->ajax())
            throw new HttpResponseException(response()->json(['success' => true]));

      }

}

答案 1 :(得分:0)

目前没有这样的方法。您可以在请求中使用一些“黑客”(例如覆盖validate方法)执行此操作,但我不建议这样做。

Request的想法是将验证/授权移出控制器。如果您将成功的回复移至Request,那么我们的情况与之前相同(好的,名称已更改)。

我建议让控制器处理ajax:

public function store(StoreItemRequest $request)
{
    $item = Item::create($request->all());
    if($request->ajax())
       return response()->json(['success' => true]);
    return 'success';
}

您是否有理由在请求中尝试实现此目的?