构建 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

哪里

此外,我正在按照以下方式构建路由

  1. /users - 所有现有用户
  2. /areas - 所有现有区域
  3. /companies - 所有现有公司
  4. /areas/{area}/companies - 特定区域的所有现有公司
  5. /users/{user}/companies - 来自特定用户的所有现有公司
  6. /companies/{company}/areas - 公司所在的所有现有区域
  7. /areas/{area}/companies/{company}/users - 来自特定区域的公司的所有现有用户

对于 1.、2. 和 3. 我正在创建遵循下一个模式的控制器

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.

现在基本上该路由列表还剩下两个案例

我的问题是,我是否应该为每个案例创建新的控制器,因为我想在每个案例中执行各种操作?如果是,那分别意味着

注意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 以避免三重嵌套。 我认为这些决定中的任何一个都会产生自己的后果,比如控制器的子目录规划、表单请求文件、提供程序,有时甚至是路由文件。 可能听过和读过一千遍,但重要的是坚持一致的方式。考虑在某些潜在升级中可能减少技术债务的因素。