RESTful вложенные маршруты Laravel

0

Я пытаюсь создать структуру URL-адресов API с вложенными маршрутами 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 (привязанный к модели 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 чтобы максимально routes.php. Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь нажать или изменить URL-адрес изменения или обновления (/api/v1/tables/<id>/settings/<edit|update>), он фактически ищет URL-адрес в форме из /api/v1/tables/<id>/settings/<another_id>/edit. Но я хочу, чтобы он использовал идентификатор таблицы, а не имел новый идентификатор настроек в URL-адресе.

Есть ли способ использовать вложенный контроллер ресурсов таким образом? Или я должен использовать другой метод?

Теги:
laravel-4
laravel-routing

1 ответ

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 прежнему работает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню