为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
森栏 2022-08-19 16:00:51
我创建了以下路由。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')任何帮助,我应该开始寻找解决方案将不胜感激。
查看完整描述

2 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

在代码中

GET|HEAD  | admin/products/{}/edit

应该用一个值填充,类似于{}{item}

如果在控制器方法中,您有如下代码:ProductsController@edit

public 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()model

public function getRouteKeyName()    {
        return 'slug';
    }

该列将从数据库中读取该项目。同样,如果您没有使用该方法,它将使用ID。slug

因此,总而言之,whould在那里与您的控制器的该模型的参数相匹配,其中默认情况下是产品模型的ID,除非您定义方法,否则该模型是Eloquent模型web{some_value}Product $some_valuesome_valuegetRouteKeyName()Products

Laravel Controllers Dependency Injection希望能解决它!


查看完整回答
反对 回复 2022-08-19
?
不负相思意

TA贡献1777条经验 获得超10个赞

正如Harven所建议的那样,问题在于资源路由没有正确定义。删除反斜杠后,一切开始工作:

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

在此之后,路由列表已正确填写,并且路由名称也已正确生成

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


查看完整回答
反对 回复 2022-08-19
  • 2 回答
  • 0 关注
  • 145 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信