3模型REST/CRUD路由应该是这样的吗?我的行程安排是不是太多了?例如“/用户/8/课程/71/热点/893/编辑”


Is this how a 3 model REST/CRUD route should look? Is there too much going on in my routing? e.g. "/user/8/lesson/71/hotspot/893/edit"

我有三个模型:User、Lesson和Hotspot。一个课程拥有许多热点,一个用户拥有许多课程。将来,我可能会允许用户访问其他用户的课程,但这是我稍后会做出的决定。因此,为了创建一个新用户,我转到"/user/create"。要创建新课程,请转到"/user/1/create"。要创建一个新的热点,我转到"/user/1/session/1/photot/create"。当我创建一个新的热点时,在我的热点控制器中,我必须为每个CRUD操作询问"用户拥有这个吗?"。

我这样做是正确的,还是错误的?

以下是我的路线(注意:uid==用户id,lid==课程id,hid==热点id)

// User CRUD routes
Route::get('/user', 'UserController@index');
Route::get('/user/create', 'UserController@create');
Route::post('/user/create', 'UserController@store');
Route::get('/user/{uid}', 'UserController@show');
Route::get('/user/{uid}/edit', 'UserController@edit');
Route::post('/user/{uid}/edit', 'UserController@update');
Route::post('/user/edit', 'UserController@update');
Route::post('/user/{uid}/delete', 'UserController@destroy');
// Lesson CRUD routes
Route::get('/user/{uid}/lesson/', 'LessonController@index');
Route::get('/user/{uid}/lesson/create', 'LessonController@create');
Route::post('/user/{uid}/lesson/create', 'LessonController@store');
Route::get('/user/{uid}/lesson/{lid}', 'LessonController@show');
Route::get('/user/{uid}/lesson/{lid}/edit', 'LessonController@edit');
Route::post('/user/{uid}/lesson/{lid}/edit', 'LessonController@update');
Route::post('/user/{uid}/lesson/edit', 'LessonController@update');
Route::post('/user/{uid}/lesson/{lid}/delete', 'LessonController@destroy');
// Lesson CRUD routes
Route::get('/user/{uid}/lesson/{lid}/hotspot', 'HotspotController@index');
Route::get('/user/{uid}/lesson/{lid}/hotspot/create', 'HotspotController@create');
Route::post('/user/{uid}/lesson/{lid}/hotspot/create', 'HotspotController@store');
Route::get('/user/{uid}/lesson/{lid}/hotspot/{hid}', 'HotspotController@show');
Route::get('/user/{uid}/lesson/{lid}/hotspot/{hid}/edit', 'HotspotController@edit');
Route::post('/user/{uid}/lesson/{lid}/hotspot/{hid}/edit', 'HotspotController@update');
Route::post('/user/{uid}/lesson/{lid}/hotspot/{hid}/edit', 'HotspotController@update');
Route::post('/user/{uid}/lesson/{lid}/hotspot/{hid}/delete', 'HotspotController@destroy');

使用嵌套资源。

路由::资源('user.classe',LessonController');

你可以随心所欲地深入。

假设您正在构建某种API。

考虑到这一点,您并不真正需要/create/edit/delete部件:所有这些都可以通过使用适当的HTTP方法来解决。