【问题标题】:Laravel returns 404 on a edit route (Laravel 6.11.0)Laravel 在编辑路线上返回 404 (Laravel 6.11.0)
【发布时间】:2020-05-13 05:21:04
【问题描述】:

我已经创建了以下路线。

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|

这是意料之中的。但是当我将{{ route('edit', $product->id) }}添加到链接href时,链接会正确生成,但是当我点击它时,我会得到404页面。当我使用表单发布销毁时也是如此(我创建了一个带有action="{{ route('destroy', $product->id) }}"@method('DELETE')的表单,但我仍然得到404。

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

【问题讨论】:

  • 从您的路由资源名称中删除尾部斜杠。将Route::resource('admin/products/', 'ProductsController')->middleware('auth'); 更改为Route::resource('admin/products', 'ProductsController')->middleware('auth');
  • 是的,这就是问题所在。谢谢。

标签: php laravel routes laravel-6


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    在您的代码中

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

    {} 应该填充一个值,例如 {item}

    如果在你的控制器 ProductsController@edit 方法中你有类似的代码

    public function edit(Request $request, Item $item){
    }
    

    第二个参数 Item $item 应该 1) 存在,2) 应该匹配你在路由 {variable} 中的值,所以如果你有 {item} 方法参数中的变量应该是item,如果是{something},那么它应该是public function edit(Request $request, Item $something);...

    注意Request $request,方法中不需要;

    我想补充一点,这样做 Item $item 将导致 404 如果找不到该项目,则将根据该项目模型中的 getRouteKeyName() 方法获取该项目,因此如果您在您的项目model类似

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

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

    总而言之,web 应该有 {some_value} 与您的控制器参数 Product $some_value 相匹配,其中 some_value 默认是 Product 模型的 ID,除非您定义 @ 987654341@ 方法你的Products Eloquent 模型

    Laravel Controllers Dependency Injection 希望能解决!

    【讨论】:

    • 感谢您的宝贵时间,但问题已由 Harven 的建议解决。
    猜你喜欢
    • 2020-04-03
    • 2021-01-31
    • 2020-12-17
    • 2021-04-09
    • 1970-01-01
    • 2014-12-07
    • 2021-07-13
    • 1970-01-01
    • 2015-03-19
    相关资源
    最近更新 更多