我有一个使用以下代码的常见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',
];
}
}
然后,我向网址DELETE
发送一个{{domain}}/api/menu/menu/2
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
有什么解决方案吗?
谢谢!
答案 0 :(得分:0)
正如我上面的评论所指出的,您正在为资源控制器生成路由。
在您的路线列表中,您可以看到该路线不希望使用实际ID作为参数,而是希望使用Menu
模型实例,Laravel会自动从中获取ID。
如果要提交表单的示例:
<form method="POST" action="{{ route('menu.destroy', ['menu' => $menuObject]) }}">
@method("DELETE")
...
</form>
$menuObject
的类型为Models\Menu
。换句话说,它是您创建的Menu
模型的一个实例