0

下面是我的 routes/web.php 文件中的路由定义示例。

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\WidgetController;

Route::controller(WidgetController::class)->name('widgets.')->prefix('widgets')->group(function () {
  Route::get('{id}/{slug}', 'show')->name('show');
  Route::get('create', 'create')->name('create')->middleware('auth');
  Route::post('store', 'store')->name('store')->middleware('auth');
  Route::get('{id}/edit', 'edit')->name('edit')->middleware('auth');
  Route::post('update', 'update')->name('update')->middleware('auth');
});

列出的所有路线都可以正常工作,除了一条。

Route::get('{id}/edit', 'edit')->name('edit')->middleware('auth');

无论出于何种原因,当它像这样编写时,它完全可以正常工作:

Route::get('{id}', 'edit')->name('edit')->middleware('auth');

或这个:

Route::get('{id}//edit', 'edit')->name('edit')->middleware('auth');

使用“Route::resource”,默认将是第一个“编辑”路由。但是,当这样定义它时,我得到一个 404。我关联的控制器方法是这样写的:

public function edit($id)
{
   // Rest of code here
}

会不会是 Laravel 将“编辑”误认为是第二个参数?但是考虑到它是资源方法的默认值,这并没有多大意义。

4

1 回答 1

2

试着放

路线::get('{id}/edit', 'edit')->nam

以上

路线::get('{id}/{slug}'

因为 {slug} 可以是任何东西,所以它更有可能首先被执行。我建议把它放在最后。

于 2022-02-20T04:18:54.670 回答