我一直在思考如何使用MVC框架重构基于页面的PHP应用程序。背景是因为我的老板要求我这么做。我已经列出了目录结构并尝试规划如何将这些页面转换为控制器/操作对。有些东西看起来很简单,比如有一些页面专门用于添加/编辑/删除用户。这很容易创建一个“用户”控制器,并添加添加/编辑/删除等方法或操作。但我面临的问题是何时实际上创建一个控制器而不是只是将它作为操作,因为这并不总是那么明确。例如,登录控制器与用户/登录,或者注册控制器与用户/注册。对我来说,如果对象可以执行某些操作,那么将其作为操作就很合理,但这并不总是那么明确。
另一个例子是,我有大约12个表单页面用于创建“计划”。在我的想法中,我认为我需要创建一个“计划”控制器,然后每个旧的表单页面都会成为一个操作。所以我会有一个具有12个操作(方法)的控制器。问题在于,虽然这12个页面都是数据输入表单,最终组成了这个“计划”,但它们唯一相同的是这一点。每个页面在数据库中使用不同的表,除此之外没有任何共同点。基本上,通过创建一个“计划”控制器,我只是将它作为分组机制使用;不一定是因为它们彼此相关。至少在上面的“用户”控制器示例中,每个操作都使用相同的“用户”表,因此将这些操作分组到一个控制器中是有意义的。那么,我应该将每个数据输入表单都创建为自己的控制器吗?
我想这就是让自己把控制器作为层次结构实体而不是对象/操作的问题。只是似乎很容易陷入错误地使用控制器的陷阱。有人明白我在说什么吗?希望这不会太混乱。
编辑:如果我尝试坚持每个视图一个控制器的做法,那么我将使每个请求的代码最小化。这是最好的方法吗?
编辑:从所有人的说法来看,似乎每个视图一个控制器并不符合我的最佳利益。我仍然有一些担忧,因为控制器可能很快变得臃肿,但这是另一个讨论的问题。我还有一些关于何时决定使用控制器而不是动作的问题。一个很好的例子就是StackOverflow本身。在页面顶部,你有一个“问题”选项,我们可以认为它带你到“问题”控制器。我之所以这么说,是因为在右侧你可以选择“提问”,它的URL指向“questions/ask”。这意味着你正在使用“questions”控制器的“ask”方法。令我困惑的是菜单中的“未回答”选项。它看起来像是有一个自己的控制器。为什么它不只是“questions/unanswered”下的一个动作呢?这就是我感到困惑的地方。