构建 Laravel 个控制器
Structuring Laravel Controllers
我有
users
id
username
companies
id
areas
id
area_company
id
area_id
company_id
area_company_user
id
area_company_id
user_id
company_user
id
company_id
user_id
area_user
id
area_id
user_id
哪里
- 一个
user
有 0 到多个 areas
并且一个 area
可以有 0 到多个 users
- 一个
area
可以有 0 到多个 companies
并且一个 company
可以有 0 到多个 areas
- 一个
company
可以有 0 到多个 users
并且一个 user
可以有 0 到多个 companies
- 一个
area_company
可以有 1 到多个 users
并且一个 user
可以有 0 到多个 area_company
area_company_user
具有特定于那种 user
的属性
此外,我正在按照以下方式构建路由
/users
- 所有现有用户
/areas
- 所有现有区域
/companies
- 所有现有公司
/areas/{area}/companies
- 特定区域的所有现有公司
/users/{user}/companies
- 来自特定用户的所有现有公司
/companies/{company}/areas
- 公司所在的所有现有区域
/areas/{area}/companies/{company}/users
- 来自特定区域的公司的所有现有用户
对于 1.、2. 和 3. 我正在创建遵循下一个模式的控制器
AreaController
与 methods index()、create()、store()、show()、edit()、update() 和 destroy()
GET /areas, index() method,
GET /areas/create, create() method,
POST /areas, store() method,
GET /areas/{area}, show() method,
GET /areas/{area}/edit, edit() method,
PUT/PATCH /areas/{area}, update() method,
DELETE /areas/{area}, destroy() method.
现在基本上该路由列表还剩下两个案例
- 案例 1:4.、5. 和 6.
- 案例 2: 7.
我的问题是,我是否应该为每个案例创建新的控制器,因为我想在每个案例中执行各种操作?如果是,那分别意味着
- 案例 1:
AreaCompanyController
、UserCompanyController
和 CompanyAreaController
- 案例 2:
AreaCompanyUserController
注意:this was a helpful answer但没有完全解决我的问题。
为了简化项目的调试和维护过程,最好为每个case定义controller,万一出了什么问题,也很容易调试和解决问题,所以你会得到
AreaController , UserController , CompanyController
你可以看到嵌套资源在docs中已经可以覆盖你的case 4,5,6。在文档中有 PhotoCommentController
你已经描述过你正在使用它(问题案例 1)。
例如,对于问题案例 2,您可以制作 model for pivot table 并将其用于路由和控制器。例如 AreaCompanyUserController
如果我理解得很好,你在这里有 area_company
枢轴 table 与用户关联。如此多的用户可以成为同一个 area_company
关联的一部分。
您可以使用 AreaCompany 模型来规避 Area 和 Company 模型,该模型将成为枢轴模型。了解该数据透视模型的 ID,您可以轻松获得关联区域、公司和用户。
class AreaCompany extends Pivot
{
/** code here */
}
有了这个,您可以将资源路由命名为 /area-companies
和 /area-companies/{$areaCompany}/users
以避免三重嵌套。
我认为这些决定中的任何一个都会产生自己的后果,比如控制器的子目录规划、表单请求文件、提供程序,有时甚至是路由文件。
可能听过和读过一千遍,但重要的是坚持一致的方式。考虑在某些潜在升级中可能减少技术债务的因素。
我有
users
id
username
companies
id
areas
id
area_company
id
area_id
company_id
area_company_user
id
area_company_id
user_id
company_user
id
company_id
user_id
area_user
id
area_id
user_id
哪里
- 一个
user
有 0 到多个areas
并且一个area
可以有 0 到多个users
- 一个
area
可以有 0 到多个companies
并且一个company
可以有 0 到多个areas
- 一个
company
可以有 0 到多个users
并且一个user
可以有 0 到多个companies
- 一个
area_company
可以有 1 到多个users
并且一个user
可以有 0 到多个area_company
area_company_user
具有特定于那种user
的属性
此外,我正在按照以下方式构建路由
/users
- 所有现有用户/areas
- 所有现有区域/companies
- 所有现有公司/areas/{area}/companies
- 特定区域的所有现有公司/users/{user}/companies
- 来自特定用户的所有现有公司/companies/{company}/areas
- 公司所在的所有现有区域/areas/{area}/companies/{company}/users
- 来自特定区域的公司的所有现有用户
对于 1.、2. 和 3. 我正在创建遵循下一个模式的控制器
AreaController
与 methods index()、create()、store()、show()、edit()、update() 和 destroy()
GET /areas, index() method,
GET /areas/create, create() method,
POST /areas, store() method,
GET /areas/{area}, show() method,
GET /areas/{area}/edit, edit() method,
PUT/PATCH /areas/{area}, update() method,
DELETE /areas/{area}, destroy() method.
现在基本上该路由列表还剩下两个案例
- 案例 1:4.、5. 和 6.
- 案例 2: 7.
我的问题是,我是否应该为每个案例创建新的控制器,因为我想在每个案例中执行各种操作?如果是,那分别意味着
- 案例 1:
AreaCompanyController
、UserCompanyController
和CompanyAreaController
- 案例 2:
AreaCompanyUserController
注意:this was a helpful answer但没有完全解决我的问题。
为了简化项目的调试和维护过程,最好为每个case定义controller,万一出了什么问题,也很容易调试和解决问题,所以你会得到
AreaController , UserController , CompanyController
你可以看到嵌套资源在docs中已经可以覆盖你的case 4,5,6。在文档中有 PhotoCommentController
你已经描述过你正在使用它(问题案例 1)。
例如,对于问题案例 2,您可以制作 model for pivot table 并将其用于路由和控制器。例如 AreaCompanyUserController
如果我理解得很好,你在这里有 area_company
枢轴 table 与用户关联。如此多的用户可以成为同一个 area_company
关联的一部分。
您可以使用 AreaCompany 模型来规避 Area 和 Company 模型,该模型将成为枢轴模型。了解该数据透视模型的 ID,您可以轻松获得关联区域、公司和用户。
class AreaCompany extends Pivot
{
/** code here */
}
有了这个,您可以将资源路由命名为 /area-companies
和 /area-companies/{$areaCompany}/users
以避免三重嵌套。
我认为这些决定中的任何一个都会产生自己的后果,比如控制器的子目录规划、表单请求文件、提供程序,有时甚至是路由文件。
可能听过和读过一千遍,但重要的是坚持一致的方式。考虑在某些潜在升级中可能减少技术债务的因素。