如何决定Web应用程序的控制器?

时间:2010-09-06 21:29:45

标签: php model-view-controller design-patterns

我使用php并且通常将我的应用程序构建到模型 - 视图 - 控制器中,因此它总是通过index.php与类和方法属性一起访问。作为URL的一部分传递的类属性指定控制器类和方法简单地调用方法。这似乎很常见,但是我总是很难弄清楚我应该创建什么样的控制器。决定应该创建哪些控制器的最佳,最简单和最适用的方法是什么?我理解这取决于Web应用程序本身,但必须采用一些通用的思维方式来启动此过程。

2 个答案:

答案 0 :(得分:2)

我发现根据应用程序的对象构建控制器效果很好,可以处理您希望为应用程序执行的大多数操作。

看看SO--这些网址以/ questions,/ tags,/ users等开头。我建议的设计首先要为每个对象创建一个不同的控制器。 / questions(或/ questions / list)返回所有问题的列表。 / questions / [0-9] +返回具有该ID号的特定问题的详细信息。 / questions / ask返回Ask Question界面。

在继续构建应用程序时,您可能会发现基于控制器的对象方法无法满足您的所有需求。例如,在我的网站(http://www.wysiap.com)上,我最终创建了一个/ list控制器来简化我的Grails URL映射。但在大多数情况下,我确实使用了这种方法,很容易弄清楚哪个控制器应该采取不同的行动。

答案 1 :(得分:0)

我建议您考虑应用程序中需要的页面,以完成所有请求的任务。您将在同一页面上对类似任务进行分组,并根据需要创建任意数量的页面。可以在不同视图中对页面进行切片以执行特定操作。

考虑到这一点,每页可以有一个控制器。页面的每个视图在控制器中都有自己的方法(动作)。在每个视图的方法中,您可以拥有一个switch(),使您可以为视图创建多个任务。例如:

  • index.php(仪表板控制器)
  • / question-list(QuestionList控制器,动作索引,显示整页)
  • / question-list / add(QuestionList控制器,操作添加,使用show-form,validate-form,insert-question等任务管理“添加”视图)
  • / profile(配置文件控制器,操作索引)
  • / profile / edit(配置文件控制器,操作编辑,管理您的个人资料所需的所有任务)
  • ...

我使用Zend-Framework

以这种方式设计我的大部分网络应用程序