簡體   English   中英

422 不可處理實體與 Laravel 8 刪除路由

[英]422 Unprocessable Entity with Laravel 8 delete route

我有一個帶有以下代碼的常見 Larvel 8 項目:

routes/api.php文件中:

Route::resources([
    'menu/menu' => Menu\MenuController::class,
]);

app/Http/Controllers/Menu/MenuController.php文件中:

public function destroy(DestroyMenuRequest $request, Menu $menu) {
    $menu->delete();

    return Response::HTTP_OK;
}

DestroyMenuRequest.php文件中:

class DestroyMenuRequest extends FormRequest {
    public function authorize() {
        return $this->user()->can('destroy.menu');
    }

    public function rules() {
        return [
            'id' => 'required|integer|exists:menus,id',
        ];
    }
}

然后我向 url {{domain}}/api/menu/menu/2發送一個DELETE HTTP 請求,然后我得到這個:

在標題 422(不可處理的條目)和正文中:

{
    "message": "The given data was invalid.",
    "errors": {
        "id": [
            "The id field is required."
        ]
    }
}

如果我使用php artisan r:l列出路由,我會看到帶有正確控制器的路由:

DELETE | api/menu/menu/{menu} | menu.destroy | App\Http\Controllers\Menu\MenuController@destroy | api auth:api

知道解決方案是什么嗎?

謝謝!

正如我上面的評論指出的那樣,您正在為資源控制器生成路由。

在您的路由列表中,您可以看到該路由不希望將實際 ID 作為參數,而是希望 Laravel 自動從中獲取 ID 的Menu模型實例。

例如,如果您正在提交表單:

<form method="POST" action="{{ route('menu.destroy', ['menu' => $menuObject]) }}">
@method("DELETE")
...
</form>

其中$menuObject的類型為Models\\Menu 換句話說,它是您創建的Menu模型的一個實例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM