Laravel 5 Laravel 5:关于成功验证请求函数

Laravel 5 Laravel 5:关于成功验证请求函数,laravel-5,laravel-validation,Laravel 5,Laravel Validation,在laravel 5中,我们现在可以使用请求类进行输入验证,如下所示: public function store(StoreItemRequest $request) { $item = Item::create($request->all()); return 'success'; } public function ????(){ if($request->ajax())

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

    public function store(StoreItemRequest $request)
    {
        $item = Item::create($request->all());
        return 'success';
    }
    public function ????(){
         if($request->ajax())
           return response()->json(['success' => true]);
    }
当验证失败时,由于
请求
类中的
响应
函数,我可以得到错误:

    public function response(array $errors) {
       return response()->json(['errors' => $errors]);
    }
但是如果验证成功呢?是否有自动触发的功能,如下所示:

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

注意:如果请求是ajax,则函数
存储
的内容不执行是必需的(就像验证失败时不会执行一样)。

是的,我在
validatewhensolvedtracit
中找到了
验证
方法,您可以在表单请求类中重写该方法

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]));

      }

}

目前还没有这样的方法。您可以在请求中使用一些“hack”(比如override
validate
method)来实现这一点,但我不推荐这样做

请求的想法是将验证/授权移出控制器。如果您将成功响应移动到
请求
,则我们的情况与以前相同(名称已更改)

我建议让controller也处理ajax:

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

您试图在请求中实现这一点有什么原因吗?

就像您可以在表单请求中覆盖
响应(数组$errors)
一样,覆盖
validate()
方法并不是一种黑客行为,它是一种大规模的定制方式。只要你不直接修改Laravel核心类,你就不是黑客。我称之为黑客,因为我不认为
validate()
是用这种方式使用的。我不相信
Request
中的任何内容都应该满足OP的要求。他可能有很好的理由,但从他的陈述来看,controller做的正是他想要的。我认为他想要一种快速返回json响应错误或json请求成功的方法,我相信这是一种不错的做法。验证仍将正常工作。我认为这取决于OPs应用程序流。正如您所说,我希望将ajax响应移出控制器(并移入请求),因为首先,我希望反复使用成功响应函数。第二,如果是ajax请求,我不想创建该项,我只希望它在后端进行验证,并告诉我它是可以的。你看到我的答案了吗?是的,这可以工作,我已经尝试过这个函数。但是,return response()->json不会停止store函数的执行。代码确实经过了$instance->passs()部分,但它仍在继续运行。(另外,您需要将$this->request->ajax()替换为$this->ajax())我编辑了您的答案,并用我的解决方案修复了响应部分,以实际终止代码的执行并发送响应。在我的编辑后,将进行同行评审,如果您同意解决方案,我将接受答案。谢谢你,好的。那么你的问题现在解决了?我自己刚批准的。但是我注意到您正在抛出一个异常:抛出新的HttpResponseException,那么
if($request->ajax())return-response()->json(['success'=>true])怎么样无效?我的问题已通过HttpResponseException解决。使用
return->response()
,代码不会停止执行。抛出异常是个坏主意吗?好吧,我明白了;但是HttpResponseException向浏览器发送错误信息,可能是错误404或403左右?你,我相信这会奏效<代码>如果($request->ajax())返回响应()->json(['success'=>true]);模具()