6

我目前使用 CodeIgniter 作为我在使用 PHP 时选择的框架。我正在努力解决的一件事是“页面”的概念,以及如何在 MVC 中正确地表示它。据我所知,CodeIgniter 有一个代表页面控制器的前端控制器。在我的思考过程中,每个页面都有自己的控制器。尽管我经常看到有人使用塞满了许多方法的页面控制器。所以从这个意义上说,每个动作都成为它自己的页面。

我从来没有真正喜欢将许多方法填充到一个控制器中的想法,因为如果您一次只需要控制器中的一两个方法,似乎会有太多的开销。每个页面都有自己的控制器似乎更合理,并且操作只会对应于您可以在该特定页面上执行的操作。我在想这个错误的方式吗?

更令人困惑的是,我会注意到在某些 Web 应用程序中,它们将有一个控制器,该控制器将具有多种方法(即登录、注册、查看、编辑等),但在其他应用程序中,它们实际上有一个登录控制器,和一个寄存器控制器。“页面控制器”的正确用途是什么?

4

3 回答 3

7

从域的角度来看,我肯定地说每个域上下文有 1 个控制器更有意义。不一定每页一个,但根据上下文可能会出现这种情况。我所说的上下文是“密切相关的行动”。

例如,帐户控制器应处理登录、注册、注销、更改密码、操作。他们都生活在“帐户”的范围内

以 Stackoverflow 为例。我将有一个“问题”控制器,它具有诸如 DisplayQuestion、AskQuestion、删除问题、MostRecent Questions 等操作。它们都是由一个控制器管理的不同“视图/页面”。

于 2009-04-17T17:59:57.103 回答
1

你是对的,控制器中的每个公共方法都变成了一个“页面”。话虽这么说,它不一定是网页,一个动作可能是数据的发布,然后重定向到另一个动作/页面,因此页面不一定意味着“网页”。

MVC 使用许多约定来使事情正常进行。例如,每个控制器都必须以“Controller”结尾。因此,一组用户页面(创建、编辑、删除等)将位于 UserController 中。在 Views 文件夹中,控制器类中的每个公共方法或操作都成为与控制器前缀匹配的文件夹中的网页(在本例中为用户文件夹)。因此,控制器类中称为“删除”的操作将指向用户文件夹中的 Delete.aspx 页面。

将所有这些方法放在一个类中似乎有点尴尬,但它可以很好地根据您的对象组织类似的功能。

于 2009-04-17T18:01:16.710 回答
1

在 MVC 中,将三者放在一起就可以得到一个“页面”。模型处理数据层,视图处理用户看到的实际 HTML,控制器决定它们如何连接在一起以显示所需的数据。我选择对现有控制器使用单独的控制器或其他方法取决于操作与我拥有的其他控制器的接近程度。假设我想要一个 UserAdmin 控制器,现在它很可能会处理添加用户、删除用户、更改密码等。如果我要添加以某种方式更改用户帐户的功能,我很可能会说在那里。如果我将它们分离到它们自己的控制器中,我自然会添加另一个。控制器允许您将类似的任务放在一起,因此它们可以利用类中已有的内容,而不必重新创建已经完成的内容。很多都是程序员认为应该怎么做的。对你有意义的对我来说可能没有意义,那是开发人员(或设计师)的选择。

于 2009-04-17T18:44:43.550 回答