路由和视图命名约定

Route and view naming conventions

我正在寻找有关我用于路由名称和视图目录结构的命名约定的一些输入。

假设我有以下路线:

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 他们在视觉上没有预期的关系。 IE。他们有不同的 'root' 目录 - teamsteam.

如有任何意见或建议,我们将不胜感激。

For the get routes, I would normally put the views in a directory structure matching the route name. E.g. resources/views/teams/team/manage/index.blade.php. However, I feel that this is way too verbose.

同意。


来自Laravel docs

Laravel 在将资源路由分配给控制器时使用典型的 RESTful "CRUD" 方法。每个 verb(即 GET、POST、PUT、DELETE)都有一个指定的 URI、一个 action(技术上,控制器方法)和 route-name(有时,/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');

我用这个 resource table 一直提醒我该做什么和不该做什么。

也许,检查一些 awesome Laravel codebases 可能会有所帮助。另外,了解其他团队如何做事总是无价的。

我发现这些非常有用:


更新

关键是坚持标准的 CRUD 操作,即索引、显示、创建、存储、编辑、更新和删除。意见将下降,就在他们的位置。

看看 Adam Wathan's talk at Laracon EU 他如何演示 任何东西都可以是 CRUDDY 只需一点想象力。

有很多方法可以根据需要维护路由,但我始终遵循以下指南,这有助于我维护文件结构并易于理解。

//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');

有关正确命名约定的更多信息,您可以遵循以下内容link

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

如果您正在构建时考虑到 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');