Laravel 5 Route::resource在嵌套Route::group中 - php

此结构适用于(所有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'); 希望这对您有帮助