Я пытаюсь создать структуру URL API с вложенными маршрутами Laravel как следующее:RESTful вложенных 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
(привязанный к модели таблицы) будет управлять данными в таблице, а контроллер (привязанный к модели 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>
), он фактически ищет URL-адрес в виде /api/v1/tables/<id>/settings/<another_id>/edit
. Но я хочу, чтобы он использовал идентификатор таблицы, а не имел новый идентификатор настроек в URL-адресе.
Есть ли способ использовать вложенный контроллер ресурсов таким образом? Или я должен использовать другой метод?
К сожалению, не повезло с этим. '/ api/v1/tables/1/settings/edit' не работает, но'/api/v1/tables/1/settings/1/edit' по-прежнему выполняется. – Samsquanch