这种结构适用于(所有GET): , ,/dashboard/video
,,/dashboard/video/element
,但不适合./dashboard/video/create
/dashboard/video/element/create
/dashboard/video/element/{id}
/dashboard/video/{id}
换句话说,show($id)
没有被要求/dashboard/video/{id}
.
知道为什么吗?
Route::group(['prefix' => 'dashboard', 'middleware' => ['csrf', 'auth']], function () {
Route::group(['prefix' => 'video'], function() {
// non-standard delete: sends array of ids in request body
Route::delete('/', 'InteractiveVideoController@destroyMany');
Route::resource('/', 'InteractiveVideoController');
Route::resource('element', 'InteractiveElementController');
});
...
});
Run Code Online (Sandbox Code Playgroud)
执行时,问题可以很容易看到
php artisan route:list
Run Code Online (Sandbox Code Playgroud)
从生成的表中可以看到:
| | GET|HEAD | dashboard/video | dashboard.video..index | App\Http\Controllers\InteractiveVideoController@index | |
| | GET|HEAD | dashboard/video/create | dashboard.video..create | App\Http\Controllers\InteractiveVideoController@create | |
| | POST | dashboard/video | dashboard.video..store | App\Http\Controllers\InteractiveVideoController@store | |
| | GET|HEAD | dashboard/video/{} | dashboard.video..show | App\Http\Controllers\InteractiveVideoController@show | |
| | GET|HEAD | dashboard/video/{}/edit | dashboard.video..edit | App\Http\Controllers\InteractiveVideoController@edit | |
| | PUT | dashboard/video/{} | dashboard.video..update | App\Http\Controllers\InteractiveVideoController@update | |
| | PATCH | dashboard/video/{} | | App\Http\Controllers\InteractiveVideoController@update | |
| | DELETE | dashboard/video/{} | dashboard.video..destroy | App\Http\Controllers\InteractiveVideoController@destroy | |
Run Code Online (Sandbox Code Playgroud)
正如您所看到的那样,通过将视频路由定义为/
视频组下的组将无法工作,只是因为为了使资源控制器创建带参数的restful路径,它将路径的第一部分用作变量名称.在你的情况下它是空的(只是一个/
被剥离的斜线),这就是你得到它的原因{}
.
您必须更改routes.php并将视频资源移出组,它将起作用,如下所示:
Route::group(['prefix' => 'dashboard'], function () {
Route::group(['prefix' => 'video'], function() {
Route::resource('element', 'InteractiveElementController');
});
// non-standard delete: sends array of ids in request body
Route::delete('video', 'InteractiveVideoController@destroyMany');
Route::resource('video', 'InteractiveVideoController');
});
Run Code Online (Sandbox Code Playgroud)
您必须将视频资源放在视频元素下,否则video/element
永远不会匹配,因为定义的路由顺序很重要.
这对您有用,现在所有页面都会正常打开.您还可以通过再次执行来检查路由是否已正确定义:
php artisan route:list
| | GET|HEAD | dashboard/video | dashboard.video.index | App\Http\Controllers\InteractiveVideoController@index | |
| | GET|HEAD | dashboard/video/create | dashboard.video.create | App\Http\Controllers\InteractiveVideoController@create | |
| | POST | dashboard/video | dashboard.video.store | App\Http\Controllers\InteractiveVideoController@store | |
| | GET|HEAD | dashboard/video/{video} | dashboard.video.show | App\Http\Controllers\InteractiveVideoController@show | |
| | GET|HEAD | dashboard/video/{video}/edit | dashboard.video.edit | App\Http\Controllers\InteractiveVideoController@edit | |
| | PUT | dashboard/video/{video} | dashboard.video.update | App\Http\Controllers\InteractiveVideoController@update | |
| | PATCH | dashboard/video/{video} | | App\Http\Controllers\InteractiveVideoController@update | |
| | DELETE | dashboard/video/{video} | dashboard.video.destroy | App\Http\Controllers\InteractiveVideoController@destroy | |
Run Code Online (Sandbox Code Playgroud)