Laravel 6自定义验证器始终返回JSON

麦克瑞

我一直在Ajax表单中使用CRUD,但是现在我需要制作一个无需Ajax即可定期发布的表单。

使PostsRequest::class我困扰了几个小时的事情是该自定义程序运行良好,但是,这是我的问题,当验证失败时,它会回显JSON消息。我需要以旧的方式捕获错误,例如:

 @error('title')
    <div class="alert alert-danger">{{ $message }}</div>
 @enderror

但是我得到的是浏览器显示:

{
 "message": "Please correct the errors.",
  "errors": {
      "title": [
          "The title must be between 15 and 16 characters."
      ]
   }
}

我的控制器中的store()方法:

/**
 * Store a newly created resource in storage.
 *
 * @param \App\Http\Requests\Frontend\ReviewsRequest $request
 * @param \App\Models\Review                         $review
 *
 * @return \Illuminate\Http\Response
 * @since 2.2.0
 */
public function store(ReviewsRequest $request, Review $review)
{

    try {
        \DB::beginTransaction();

        $data                     = $request->all();
        $data['active']           = 0;
        $data['approved']         = 0;

        $review = $review->create($data);

        // sync user reviews
        $review->users()->sync(auth()->id(), $review->id);

        // sync internal reviews
        if($request->get('type') == 'internals') {
            $review->internals()->sync(1, $review->id);
        }

        // sync internal reviews
        if($request->get('type') == 'firm') {
            $review->firms()->sync(120, $review->id);
        }

        \DB::commit();

        return view('frontend.reviews.review_thank_you');

    } catch(Exception $e) {
        echo $e->getMessage();
    } finally {
    }
}

我搜索了几乎所有地方的文档,StackOverflow,Web等中的内容,而我所发现的只是希望得到JSON响应的人们。

PostsRequest课堂上,我像往常一样设置了public function rules(){ ... }public function messages( ... )

我可能做错了什么?感谢您对这个非常愚蠢的问题的帮助。

麦克瑞

好,

解决了。

经过数小时的深入研究,并遵循验证过程的每个步骤,我终于找到了造成这种现象的原因。

在我的课程中App\Exceptions\Handlerrender()方法具有如下重写:

/**
* Render an exception into an HTTP response.
*
* @param  \Illuminate\Http\Request  $request
* @param  \Exception  $exception
* @return \Symfony\Component\HttpFoundation\Response
*
* @throws \Exception
*/
public function render($request, Exception $exception)
{
    // THIS IS WHERE THE 'BLACK MAGIC' WAS HAPPENING <----
    if ($exception instanceof ValidationException){
        return response()->json([
            'message' =>'Please correct the errors.', 
            'errors'  => $exception->validator->getMessageBag()], 422);
    }

    return parent::render($request, $exception);
}

有时我们不得不从20小时的工作时间中休息一下以刷新和重置大脑...

感谢所有试图研究这个问题的人。如果有人发现自己遇到这种问题,请查看您的App \ Exceptions \ Handler :: class方法的逻辑。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章