首页 > 解决方案 > API Postman 错误:“此路由不支持 PATCH 方法。支持的方法:GET、HEAD”

问题描述

我为自定义验证规则storeupdate方法创建了名为“StoreUser”的自定义请求。对于store我在 Postman 中使用POST方法时的方法,一切都很好。但是对于PATCH/PUT我捕获错误的方法:“此路线不支持 PATCH 方法”。

支持的方法:GET,HEAD”。我的 PATCH 方法的 URL:http://127.0.0.1:8000/api/users/44 使用 debagger,我发现当自定义Request "StoreUser"启动返回方法中的数组规则时出现问题rules()。下面我的代码。只有PATCH/PUT方法中出现错误,POST没关系

Api资源

Route::apiResource('users', 'UserController');

UserController 更新/存储方法

public function store(StoreUser $request)
{
    $request->validated();

    $password = User::hashPassword($request->get('password'));
    $request->merge(['password' => $password]);

    $user = User::create($request->all());
    return response()->json($user, 201);
}

public function update(StoreUser $request, $id)
{
    $request->validated();
    $user = User::find($id);
    $user->update($request->all());
    return response()->json($user, 200);
}

自定义请求 StoreUser

public function rules()
{
    return [ // in this place error occurs ONLY IN PATCH/PUT methods
        'name' => 'required|min:5',
        'email' => 'required|email|unique:users',
        'password' => 'required|min:6|max:50'
    ];
}

标签: laraveleloquent

解决方案


尝试 romve $request->validated(); 当您使用自定义验证类时,无需调用验证()方法

public function update(StoreUser $request, $id)
{
$request->validated();
$user = User::find($id);
$user->update($request->all());
return response()->json($user, 200);
}

use following code
public function update(StoreUser $request, User $user)
{
$user->update($request->all());
return response()->json($user, 200);
}

在上面的代码中,用户 $user 用作参数意味着路由模型绑定,因此无需使用额外的查询来查找用户


推荐阅读