当 $request->validate 失败时 Laravel 抛出 404

run*_*ark 8 php validation rest laravel

我们正在为我们的应用程序创建一个 REST API。

网页.php

Route::post('add-new-student', 'StudentController@addNewStudent');
Run Code Online (Sandbox Code Playgroud)

学生控制器.php

Route::post('add-new-student', 'StudentController@addNewStudent');
Run Code Online (Sandbox Code Playgroud)

现在,当我们发送 JSON 响应时,如果出现错误,它不会转到 else 块,而是在邮递员中显示 404 页面。

我们不知道自己做错了什么!

笔记

  • 我们的路线是正确的(双重检查)
  • 在邮递员中,我们正在发送邮寄请求

小智 28

Validation Request 类检查您的请求是 ajax 请求还是普通请求。

如果这是一个正常的请求,它会执​​行:redirect()->back(),并在会话中包含验证消息。

如果它是 ajax 请求,它会显示一个 json 对象,其中包含验证消息。

前端框架/库(例如 jQuery)会向 ajax 请求添加标头,让后端知道这是一个 ajax 请求。Laravel 检查此标头来决定要做什么。

Postman 不会自动发送此标头。因此,您应该手动添加以下标头之一:

Accept: application/json

X-Requested-With: XMLHttpRequest
Run Code Online (Sandbox Code Playgroud)


run*_*ark 3

当失败时执行$request->validate()重定向,然后if($validation->fails())永远不会执行。

正确答案是手动创建验证器

use Illuminate\Support\Facades\Validator; // include this at top

$validation = Validator::make($request->all() ,[
   'student_mobile'   =>  'required|digits:10',
   'student_name'     =>  'required|min:3|max:50',
   'student_email'    =>  'email:rfc|max:50',
]);

if($validation->fails()) {
   // validation failed
} else {
   // validation passed
}
Run Code Online (Sandbox Code Playgroud)