2015-01-06 149 views
0

我試圖創建一個嵌套的Laravel路由信息的API URL結構如下所示:REST風格的嵌套Laravel路線

/api/v1/tables -- list tables 
/api/v1/tables/<id> -- show one table data 
/api/v1/tables/<id>/update (post) -- update table data (inline editing of table, so edit screen not needed) 
/api/v1/tables/<id>/settings -- get settings for that table 
/api/v1/tables/<id>/settings/edit -- edit settings for that table 
/api/v1/tables/<id>/settings/update (post) -- save settings for that table 

我試着用嵌套資源,兩個控制器這樣做。 TableController(綁定到Table模型)將控制表中的數據,並且TableSettings(綁定到TableSettings模型)控制器將控制設置(列名,順序,可視性等)。這個想法是,您將撥打/api/v1/tables/<id>來獲取表格的數據並使/api/v1/tables/<id>/settings獲得設置,然後使用它來構建顯示。

在我routes.php我:

Route::group(array('prefix' => 'api/v1'), function() 
{ 
    Route::resource('tables', 'TablesController', 
        array('only' => array('index', 'show', 'update'))); 
    Route::resource('tables.settings', 'TableSettingsController'. 
        array('only' => array('index', 'edit', 'update'))); 
}); 

我希望做一些事情來這種效果來跟上routes.php儘可能乾淨。我遇到的問題是,當我嘗試點擊設置編輯或更新URL(/api/v1/tables/<id>/settings/<edit|update>)時,它實際上是以/api/v1/tables/<id>/settings/<another_id>/edit的形式查找URL。但我希望它使用表格的ID,而不是在URL中有全新的設置ID。

有沒有辦法以這種方式使用嵌套的資源控制器?或者我應該使用另一種方法?

回答

1

如果重新安排資源的順序 - 我認爲這將工作:

Route::group(array('prefix' => 'api/v1'), function() 
{ 
    Route::resource('tables.settings', 'TableSettingsController'. 
        array('only' => array('index', 'edit', 'update'))); 
    Route::resource('tables', 'TablesController', 
        array('only' => array('index', 'show', 'update'))); 
}); 
+0

不幸的是,沒有運氣與此有關。 '/ api/v1/tables/1/settings/edit'不起作用,但是'/ api/v1/tables/1/settings/1/edit'仍然有效。 – Samsquanch