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 AppHttpRequestsFrontendReviewsRequest $request
* @param AppModelsReview                         $review
*
* @return IlluminateHttpResponse
* @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( ... )

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

好吧,

它已经解决了。

经过数小时的代码挖掘和验证过程的每一步,我终于找到了这种行为背后的原因。

在我的类AppExceptionsHandler中,render()方法有一个覆盖,如下所示:

/**
* Render an exception into an HTTP response.
*
* @param  IlluminateHttpRequest  $request
* @param  Exception  $exception
* @return SymfonyComponentHttpFoundationResponse
*
* @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方法的逻辑。

相关内容

  • 没有找到相关文章

最新更新