首页 > 解决方案 > Laravel 自定义请求验证不起作用

问题描述

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

api.php

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

更新UserGeneralInfoController.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)
{
}

标签: laravellaravel-7

解决方案


您必须在请求中传递所有这 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


推荐阅读