路由和视图命名约定

14

我希望您提供一些有关路由名称和视图目录结构命名约定的建议。

假设我有以下路由:

Route::get('/teams/choose', 'ChooseTeamController@index')->name('teams.choose.index');

Route::post('/teams/choose', 'ChooseTeamController@choose')->name('teams.choose');

Route::get('/teams/{team}/manage', 'ManageTeamController@index')->name('teams.team.manage.index');
对于“get”路由,我通常会将视图放在与路由名称匹配的目录结构中。例如:resources/views/teams/team/manage/index.blade.php。但是,我觉得这样太啰嗦了。
如果我使用以下的视图目录结构,而不是最后一个示例中的结构,会让所有人(包括我和其他开发者)都感到困惑:resources/views/team/manage/index.blade.php - 没有使用“team”的复数形式,因此当我有其他视图时,比如这样(使用原始示例的约定):resources/views/teams/choose.index,它们在视觉上没有预期的关系。即它们具有不同的“根”目录 - teamsteam不同。
任何建议或意见都将不胜感激。
3个回答

26
对于get路由,我通常会将视图放在与路由名称匹配的目录结构中。例如:resources/views/teams/team/manage/index.blade.php。但是,我觉得这太啰嗦了。
我同意。

来自Laravel文档

Laravel在将资源路由分配给控制器时使用典型的RESTful“CRUD”方法。每个动词(即GET、POST、PUT、DELETE)都有一个指定的URI、一个操作(技术上是控制器方法)和一个路由名称(有时是/path/to/blade/view)。

因此,从您的片段中:

// return view(teams.index)
Route::get('/teams', 'TeamController@index');

// return view(teams.create)
Route::get('/teams/create', 'TeamsController@create');

// redirect('/home');
Route::post('/teams', 'TeamController@store');

// return view('teams.profile')
Route::get('/teams/profile', 'TeamController@profile')->name('profile');

我一直使用资源表来时刻提醒自己应该做什么和不应该做什么。

或许,检查一些Laravel 代码库可能会有所帮助。此外,了解其他团队的做法视角也是非常宝贵的。

我发现这些都非常有帮助:


更新

关键是坚持使用标准的CRUD操作,即索引、显示、创建、存储、编辑、更新和删除。视图将自然而然地落入它们的位置。

请查看Adam Wathan在Laracon EU上的演讲,他展示了如何通过一点想象力使任何东西都可以成为CRUDDY。


4

有很多方法可以根据需求来维护路由,但我总是遵循以下准则,这有助于我维护文件结构并易于理解。

//listing
Route::get('/teams', 'TeamController@index');

//Create
Route::get('/teams/create', 'TeamController@create');

//Store
Route::post('/teams/store', 'TeamController@store');

//Show
Route::get('/teams/{id}', 'TeamController@show');

//Edit
Route::get('/teams/{id}/edit', 'TeamController@edit');

//Update
Route::put('/teams/{id}/update', 'TeamController@update');

//Delete
Route::delete('/teams/{id}/delete', 'TeamController@delete');

如需更多有关适当命名约定的信息,请参考以下链接

https://laravel.com/docs/7.x/controllers#restful-nested-resources


3
路由中不要使用动词,而是使用 Route::delete('/teams/{id}', 'TeamController@delete'); 代替 Route::delete('/teams/{id}/delete', 'TeamController@delete'); - Chigozie Madubuko

0

如果你的构建过程中关注的是通过API消费,那么你就不需要createedit表单,因此端点可以简化为:

//listing
Route::get('/teams', 'TeamController@index');

//Store
Route::post('/teams', 'TeamController@store');

//Show
Route::get('/teams/{id}', 'TeamController@show');

//Update
Route::put('/teams/{id}', 'TeamController@update');

//Delete
Route::delete('/teams/{id}', 'TeamController@delete');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接