1

我一直在我的表单中使用 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 中的文档、网络等,我发现的只是人们想要一个 JSON 响应。

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

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

4

1 回答 1

1

出色地,

解决了。

在深入研究代码并遵循验证过程的每一步之后,我终于找到了这种行为背后的原因。

在我的班级App\Exceptions\Handler中,该render()方法具有如下覆盖:

/**
* 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方法的逻辑。

于 2020-04-11T21:42:51.177 回答