我正在这里找到的入门网站上工作,我正在尝试让嵌套的资源路由正常工作。我有包含许多版本的项目,项目和版本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-控制器