我尝试使用嵌套的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。
有没有办法以这种方式使用嵌套资源控制器?或者我应该使用其他方法吗?
答案 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')));
});