猿问

Laravel 在编辑路线上返回 404 (Laravel 6.11.0)

我创建了以下路由。

Route::resource('admin/products/', 'ProductsController')->middleware('auth');

我已经使用Artisan创建了一个包含所有方法(索引,创建,编辑等)的控制器。

当我使用命令php artisan route:list时,我得到以下路线(其中包括):

GET|HEAD  | admin/products/{}/edit | edit   | App\Http\Controllers\ProductsController@edit   | web,auth|
DELETE    | admin/products/{}      | destroy| App\Http\Controllers\ProductsController@destroy| web,auth|

这是可以预料的。但是当我添加到链接href时,链接是正确生成的,但是当我点击它时,我得到了404页面。同样的情况是,当我使用表单发布来销毁时(我已经创建了一个表单,我仍然得到404。{{ route('edit', $product->id) }}action="{{ route('destroy', $product->id) }}"@method('DELETE')

任何帮助,我应该开始寻找解决方案将不胜感激。


森栏
浏览 146回答 2
2回答

神不在的星期二

在代码中GET|HEAD  | admin/products/{}/edit应该用一个值填充,类似于{}{item}如果在控制器方法中,您有如下代码:ProductsController@editpublic function edit(Request $request, Item $item){ }第二个参数应该 1) 存在,2) 应该与路由 {variable} 中的值匹配,所以如果你在方法参数中有变量,那么它应该是Item $item{item}item{something}public function edit(Request $request, Item $something);...请注意,请求$request,在方法中不是必需的;我想补充一点,如果找不到该项目,这样做将导致404,该项目将根据该项目模型中的方法获取,因此,如果您的物品中有类似的东西Item $itemgetRouteKeyName()modelpublic function getRouteKeyName()    {         return 'slug';     }该列将从数据库中读取该项目。同样,如果您没有使用该方法,它将使用ID。slug因此,总而言之,whould在那里与您的控制器的该模型的参数相匹配,其中默认情况下是产品模型的ID,除非您定义方法,否则该模型是Eloquent模型web{some_value}Product $some_valuesome_valuegetRouteKeyName()ProductsLaravel Controllers Dependency Injection希望能解决它!

不负相思意

正如Harven所建议的那样,问题在于资源路由没有正确定义。删除反斜杠后,一切开始工作:Route::resource('admin/products', 'ProductsController')->middleware('auth');在此之后,路由列表已正确填写,并且路由名称也已正确生成| GET|HEAD| admin/products/{product}/edit | products.edit | App\Http\Controllers\ProductsController@edit | web,auth |
随时随地看视频慕课网APP
我要回答