RESTful嵌套Laravel路由

时间:2015-01-06 19:22:30

标签: php laravel-4 laravel-routing

我尝试使用嵌套的Laravel路由创建API网址结构,如下所示:

/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(绑定到表模型)将控制表中的数据,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尽可能干净,我想做一些这方面的事情。我遇到的问题是,当我尝试点击设置编辑或更新网址(/api/v1/tables/<id>/settings/<edit|update>)时,它实际上正在寻找/api/v1/tables/<id>/settings/<another_id>/edit形式的网址。但我希望它使用表格的ID,而不是在URL中设置一个全新的设置ID。

有没有办法以这种方式使用嵌套资源控制器?或者我应该使用其他方法吗?

1 个答案:

答案 0 :(得分: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')));
});