【发布时间】:2010-09-29 21:17:35
【问题描述】:
我一直在努力研究如何使用 MVC 框架重新编码基于页面的 PHP 应用程序。仅作为背景,我不得不将应用程序移至 MVC,因为我的老板正在制作我。不管怎样,我坐下来,打印出目录结构。然后我开始尝试计划如何将这些页面转换为控制器/动作对。有些事情看起来很直接。例如,我有几个页面专门用于添加/编辑/删除用户。这很容易创建一个“用户”控制器,并为添加/编辑/删除添加方法或操作。我遇到的问题是决定何时实际创建控制器而不是仅将某些东西作为动作,因为它并不总是那么明确。例如,登录控制器与用户/登录,或注册控制器与用户/注册。对我来说,如果对象可以做某事,那么作为一个动作是非常有意义的,但它并不总是那么明确。
另一个例子是,我有大约 12 个用于创建“计划”的表单页面。在我的脑海中,我认为我需要创建一个“计划”控制器,然后每个旧的页面都会变成一个动作。所以我有一个控制器,有 12 个动作(方法)。对我来说,问题是,尽管所有 12 个页面都是数据输入表单,但最终构成了这个“计划”,这就是它们的共同点。每个页面使用数据库中的不同表,并且彼此之间没有任何共同之处。基本上通过创建一个“计划”控制器,我只是将其用作分组机制;不一定要使用它,因为它们彼此相关。至少在上面的“用户”控制器示例中;这些动作中的每一个都使用相同的“用户”表,因此将这些动作分组到一个控制器中是有意义的。我应该让这些数据输入表单中的每一个都有自己的控制器吗?
我想这归结为让我自己使用控制器作为层次结构实体而不是对象/动作。似乎很容易以错误的方式使用控制器陷入这个陷阱。有人明白我在说什么吗?希望不要太混乱。
编辑:如果我尝试坚持每个视图使用一个控制器;然后,我会将每个请求的代码保持在最低限度。这是最好的方法吗?
编辑:从每个人的说法来看,每个视图一个控制器似乎不符合我的最大利益。我仍然有些担心,因为控制器似乎很快就会变胖,但这是另一个讨论。我还有一些关于何时决定使用控制器而不是动作的问题。一个很好的例子是 stackoverflow 本身。在页面顶部,您有一个“问题”选项,我们可以假设它会将您带到“问题”控制器。我这样说是因为在右侧您可以选择“提问”,URL 指向“问题/提问”。这是有道理的,你使用问题控制器的 ask 方法。让我感到困惑的是,菜单上有“未回答”选项。看起来这本身就有一个控制器。为什么它不像“问题/未回答”那样只是问题控制器下的一个动作?这就是我变得混乱的地方。
【问题讨论】:
-
我真的希望这个要求是因为他们计划在未来用这个应用程序做大事,而不仅仅是因为 MVC 是最新的开发流行语。如果他们这样做是出于正当理由,那就是在浪费大量时间,并且会产生大量新错误。
-
我认为这个小丑(乔)“元”太多,“做”不够
标签: php model-view-controller codeigniter controller