【问题标题】:Laravel custom Request validation not workingLaravel 自定义请求验证不起作用
【发布时间】:2020-12-10 01:40:54
【问题描述】:

我正在尝试通过创建自定义表单请求来使用表单 Laravel 请求验证。这是我的代码 sn-p

api.php

Route::group(['namespace' => 'User'], function () {
  Route::put('user/{user}', 'UpdateUserGeneralInfoController@UpdateUserGeneralInfo');
});

UpdateUserGeneralInfoController.php

use App\Http\Controllers\Controller;
use App\Http\Requests\User\UpdateUserGeneralInfoRequest;

class UpdateUserGeneralInfoController extends Controller
{
   public function UpdateUserGeneralInfo(UpdateUserGeneralInfoRequest $request,User $user)
   {
      $user->name = $request->name;
      $user->email = $request->email;
      $user->date_of_birth = $request->date_of_birth;
      $user->save();

      $response = [
          'message' => 'User info updated successfully'
      ];

      return response($response, 201);

    }
 }

UpdateUserGeneralInfoRequest.php

namespace App\Http\Requests\User;
use Illuminate\Foundation\Http\FormRequest;

class UpdateUserGeneralInfoRequest extends FormRequest
{
  public function authorize()
  {
     return true;    
  }

  public function rules()
  {
     return [
        'name' => 'required|max:50',
        'email' => 'required',
        'date_Of_birth' => 'required'
     ];
  }

  public function messages()
  {
    return [
        'name.required' => 'Name is required',
        'email.required' => 'An email is required',
        'date_Of_birth' => 'Date of Birth is required'
    ];
  }
}

文件夹结构是

我正在尝试通过 Postman 测试请求。所以这是我的 json 输入

{
  "id" : 1,
  "name":"Osman Rafi",
  "email": "rafi@devport.com",
  "current_address": "House-26,Islampur R/A, Mejortila, Sylhet-3100,Bangladesh",
  "bio": "But a man is not made for defeat. A man can be destroyed,but not defeated.",
  "linkedin": "linkedin.com/in/osman-goni-chowdhury-bb421a16b",
  "facebook": "https://www.facebook.com/osman.rafi140",
  "github": "https://github.com/Osman-Rafi",
  "blood_group": "O(+ve)",
  "password": "111111"
}

它告诉我

404 | Not Found

如果我尝试这是控制器,它会完美运行

public function UpdateUserGeneralInfo(Request $request,User $user)
{
}

【问题讨论】:

  • 运行php artisan route:list 并将您的PUTing 从PostMan 到输出的路线进行比较。还要确保您的 users 表中有一行 id 为 1。此处的 404 可能表示未找到路由或没有给定 ID 的用户记录。
  • 错字:$request->date_of_birth 在您的控制器中,'date_Of_birth' 在您的表单请求中
  • 你在邮递员中使用了api前缀吗?
  • 用户表有一行id为1,路由和邮递员url相同,也添加了api前缀但问题仍然存在
  • 当验证失败时您似乎被重定向并导致 404。如果您通过验证会发生什么??

标签: laravel laravel-7


【解决方案1】:

您必须在请求中传递所有这 3 个变量(您缺少 date_Of_birth):

'name' => 'required|max:50',
'email' => 'required',
'date_Of_birth' => 'required'

但是,我认为您的错误来自其他几个地方,因为 404 not found 来自链接中未找到的路线。

你在添加你调用的路由后是否清除了路由缓存:

试试

php 工匠路线:缓存

还加

'name.required' => 'Name is required',
'email.required' => 'An email is required',
'date_Of_birth' => 'Date of Birth is required'

date_Of_birth.required

【讨论】:

  • 试过了,但没用。如果我将UpdateUserGeneralInfoRequest 替换为Request
  • 您是否检查过您是否正在发送 put 请求?
  • 是的。这是邮递员的请求http://localhost:8000/api/user/1
  • 请确保您在请求数据中添加了“date_Of_birth”,“O”为大写字母。现在我看到在请求'date_Of_birth' =>'需要出生日期'的消息函数中添加.required'
  • 如果您启用了调试,您将看到有关错误的更多详细信息。另外,请检查您是否发送 Accept application/json 标头。 (如果 debug.is 设置为 true,即使没有你也应该看到完全错误)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-30
  • 2020-12-25
  • 2017-11-17
  • 2011-04-17
  • 2019-10-07
  • 1970-01-01
  • 2013-07-09
相关资源
最近更新 更多