【问题标题】:Laravel throws 404 when $request->validate fails当 $request->validate 失败时,Laravel 抛出 404
【发布时间】:2020-05-13 19:53:43
【问题描述】:

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

web.php

Route::post('add-new-student', 'StudentController@addNewStudent');

StudentController.php

...
function addNewStudent(Request $request)
{
    $validation = $request->validate([
        'student_mobile' => 'required|digits:10',
        'student_name' => 'required|min:3|max:50',
        'student_email' => 'email:rfc|max:50',
    ]);

    if ($validation->fails()) {
        // show error json
    } else {
        // add new student
    }
}
...

现在当我们发送 JSON 响应时,如果有错误,而不是去 else 阻止它在邮递员中显示 404 页面。

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

注意

  • 我们的路线是正确的(仔细检查)
  • 在 postman 中,我们正在发送 post 请求

【问题讨论】:

  • 我相信$request->validate() 在失败时会执行重定向。哪个 URL 抛出了 404?
  • url 是一样的,因为我们在 postman 上测试
  • 使用$validator = Validator::make($request->all(), [...]);,然后你就可以if ($validator->fails()) { ... }
  • @porloscerrosΨ 工作谢谢!

标签: php laravel rest validation


【解决方案1】:

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

如果是正常请求,它会执​​行:redirect()->back() 以及会话中的验证消息。

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

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

Postman 不会自动发送此标头。所以你应该手动添加以下标题之一:

Accept: application/json

X-Requested-With: XMLHttpRequest

【讨论】:

  • 就我而言,这就是解决方案。谢谢
  • 谢谢,当你发布 api 请求时,它有助于我的 laravel 8 表单请求
【解决方案2】:

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

正确答案是Manually Creating Validators

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
}

【讨论】:

    猜你喜欢
    • 2012-12-26
    • 2016-01-04
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 2021-07-17
    相关资源
    最近更新 更多