laravel中的嵌套资源路由出现问题


Trouble with nested resource routing in laravel

我正在这里找到的入门网站上工作,我正在尝试让嵌套的资源路由正常工作。我有包含许多版本的项目,项目和版本URL都需要常用的查看/编辑/删除功能。我把我的路线设置成这样:

    # Project Management
    Route::get('projects/{project}', 'AdminProjectsController@getShow');
    Route::get('projects/{project}/edit', 'AdminProjectsController@getEdit');
    Route::post('projects/{project}/edit', 'AdminProjectsController@postEdit');
    Route::get('projects/{project}/delete', 'AdminProjectsController@getDelete');
    Route::post('projects/{project}/delete', 'AdminProjectsController@postDelete');
    Route::controller('projects', 'AdminProjectsController');
    # Version Management
    Route::get('projects/{project}/versions/{version}', 'AdminVersionsController@getShow');
    Route::get('projects/{project}/versions/{version}/edit', 'AdminVersionsController@getEdit');
    Route::post('projects/{project}/versions/{version}/edit', 'AdminVersionsController@postEdit');
    Route::get('projects/{project}/versions/{version}/delete', 'AdminVersionsController@getDelete');
    Route::post('projects/{project}/versions/{version}/delete', 'AdminVersionsController@postDelete');
    Route::controller('projects.versions', 'AdminVersionsController');

我遇到的问题是,当我转到像/projects/1/versions/1这样的url时,我会收到以下错误:

Symfony ' Component ' HttpKernel ' Exception ' NotFoundHttpException
Controller method not found.

AdminVersionsController的getShow()方法确实存在,看起来像这样:

class AdminVersionsController extends AdminController {
    ....
    public function getShow($project, $version) {
        ....
    }
    ....
}

对于与这些版本相关的其他URL,我也会收到同样的错误。你知道我做错了什么吗?

您的url被这个restful路由集(称为_missing的路由集)捕获:

Route::controller('projects', 'AdminProjectsController');
// the route is this:
GET|HEAD|POST|PUT|PATCH|DELETE projects/{_missing}

您想要的嵌套资源是:

Route::resource('projects.versions', 'AdminProjectsController');

然后,在该控制器中,您需要重命名方法以匹配资源控制器的方法:http://laravel.com/docs/controllers#resource-控制器