此结构适用于(所有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');
});
...
});
参考方案
执行该问题时,很容易看到问题
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/{} | 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 | |
正如您通过在videos组下将video路由定义为/
所看到的那样,这根本不起作用,这仅仅是因为为了使资源控制器创建带有参数的静态路径,它使用路径的第一部分作为变量名。在您的情况下,它是空的(只是一个斜杠/
被剥夺了),这就是为什么要得到这个{}
的原因。
您必须更改您的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');
});
您必须将视频资源放在video元素下,否则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 | |
如何在Laravel中通过路由名称获取带有名称空间的路由? - php我有一条路线如下Route::group(['prefix' => '/entry', 'namespace' => 'acme'], function() { Route::get('add', [ 'uses' => …
PHP Laravel从另一个驱动器读取文件 - php我目前正在学习Laravel。我想知道是否有一种方法可以在Laravel中使用Storage::从另一个硬盘访问文件(使用Windows)。例如,我在驱动器C:上安装了带有Laravel的Xampp,但是我想访问网站目录之外的E:上的文件。我试过使用Storage::files('E:')和File::files('E:…
检查对象是否已在集合中-Laravel - php当我循环一系列不同的结果时,我希望将对象添加到新集合中。查询:$osRed = Item::where('category', 'Hardware') ->where(function ($query) { $query->where('operating_system', '…
laravel Hash::make继续给出不同的结果 - php我想在laravel 4中使用身份验证我改了桌子和莫贝尔的名字当用户注册时,我拥有密码并将其保存,哈希为:$password = Hash::make(Input::get('password')); 然后当用户登录时,我想先对他/她进行身份验证。我这样做是这样的:if (Auth::attempt(array('usernam…
Laravel打印日志 - php我正在尝试在控制台上打印日志:我输入了:use Log; 然后在控制器中使用 Log::info('test log'); 但它不打印任何日志。 参考方案 我认为您需要在运行后检查storage/logs/laravel.logLog::info('test log'); 希望这对您有帮助