【问题标题】:API Postman error: "The PATCH method is not supported for this route. Supported methods: GET, HEAD"API Postman 错误:“此路由不支持 PATCH 方法。支持的方法:GET、HEAD”
【发布时间】:2020-07-30 14:31:18
【问题描述】:

我为storeupdate 方法的自定义验证规则创建了名为“StoreUser”的自定义请求。对于store 方法,当我在邮递员中使用POST 方法时,一切正常。但是对于PATCH/PUT 方法,我发现错误:“此路由不支持 PATCH 方法”。

支持的方法:GET、HEAD"。我的 PATCH 方法的 URL:http://127.0.0.1:8000/api/users/44 使用 debagger,我发现在rules() 方法中自定义Request "StoreUser" 开始返回数组规则时会出现问题。 在我的代码下面。 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'
    ];
}

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

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

    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 用作参数意味着路由模型绑定,所以 无需使用额外的查询来查找用户

    【讨论】:

    • 当我第一次调用更新方法时,它会转到 StoreUser 请求并导致错误,因此没有一行代码没有在更新方法中调用
    • 发生了什么问题?
    • error image 与写我的问题之前的错误相同
    • 我尝试使用密码,没有密码,无论如何我都会发现错误
    • return response([ 'Message:' => 'UserUpdted Sucessfully', 'data' => $user ],Response::HTTP_CREATED);试试这个
    【解决方案2】:

    您是否尝试在请求正文中添加 _method="PATCH"。请求的类型应该是 POST。

    【讨论】:

    • 是的,它返回给我 200 码,但我不知道为什么,btn nothing update i.imgur.com/j4H8oPQ.png
    • 尝试仅将您的输入作为响应返回并评论其他所有内容,以查看数据是否按预期传递。
    • 如果我理解正确,我使用 post 方法创建新用户并复制所有 json 数据,然后我将其全部粘贴到 PUT/PATCH 方法中并捕获相同的错误。在 StoreUser rules() 方法调用规则返回时出现代码中断,如果例如我添加 dd(1);在返回邮递员之前把那个 1 还给我
    • 使用像 i.imgur.com/j4H8oPQ.png 这样的请求,但是在你的控制器方法 update 中评论每件事,然后使用像 return response()->json($request->all()) 这样的东西
    • 我评论了所有并粘贴了你的代码,然后返回了 200 个带有 laravel 主页的代码
    猜你喜欢
    • 2020-08-06
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    • 2020-12-06
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多