2014-04-22 80 views
0

我正在關閉初始網站,您可以找到here,並且我試圖獲取嵌套的資源路由。我有包含許多版本的項目,並且項目和版本URL都需要通常的查看/編輯/刪除功能。我建立了我的路線是這樣的:在laravel中嵌套資源路由的問題

# Project Management 
    Route::get('projects/{project}', '[email protected]'); 
    Route::get('projects/{project}/edit', '[email protected]'); 
    Route::post('projects/{project}/edit', '[email protected]'); 
    Route::get('projects/{project}/delete', '[email protected]'); 
    Route::post('projects/{project}/delete', '[email protected]'); 
    Route::controller('projects', 'AdminProjectsController'); 

    # Version Management 
    Route::get('projects/{project}/versions/{version}', '[email protected]'); 
    Route::get('projects/{project}/versions/{version}/edit', '[email protected]'); 
    Route::post('projects/{project}/versions/{version}/edit', '[email protected]'); 
    Route::get('projects/{project}/versions/{version}/delete', '[email protected]'); 
    Route::post('projects/{project}/versions/{version}/delete', '[email protected]'); 
    Route::controller('projects.versions', 'AdminVersionsController'); 

我遇到的問題是,當我去到一個URL像/projects/1/versions/1我得到這個錯誤:

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

和在AdminVersionsController的getShow()方法確實存在,看起來像這樣:

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

我也得到了同樣的錯誤了相關版本所有其他網址。關於我在做什麼的任何想法都是錯誤的?

回答

0

您的網址是通過設置這個寧靜的路線(一個叫_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-controllers

+0

我對你的意思有點困惑。我不認爲簡單地將'Route :: controller('projects.versions','AdminVersionsController');''作爲Route :: resource('projects.versions','AdminProjectsController')''將要解決我的問題,你可以擴展你的答案嗎? – Samsquanch

+0

在控制檯中運行「工匠路線」以檢查您現在定義的路線,然後在寫入時更改並再次檢查。基本上寧靜的控制器(你現在有什麼)總是默認有_missing路由。此外,你不能隨意嵌套這些。 –

+0

當我運行'artisan routes'時,路線在那裏:'GET | HEAD admin/projects/{project}/versions/{version} | | AdminVersionsController @ getShow'。 – Samsquanch