Daily Archives: March 18, 2015


1. Yii — MVC 开发 — M,V,C各自的职责

Model 表示网站内在的数据结构,它的代码中不应该包括HTML,CSS等前端语言,并且不应该处理$_GET, $_POST的用户请求。前者是Controller来做的,后者是View来处理的。 它的职责是对数据库进行增删改查,并且在进行数据库操作前进行数据合法性的校验。 View 面对用户呈现数据最终的表现形式。 它应该包括HTML代码,和简单的遍历,格式化,渲染数据的PHP代码。 它不应该包括对数据库的操作和对用户请求的处理($_GET, $_POST) 他可以调用Controller或Model的成员变量或是方法,但它应该仅仅用来呈现数据。 View可以有不同的复用形式: Layout: 页面中共同的表现区域,比如header,footer就可以放在layout的view中 Partial views:partial view渲染时不会被layout装饰,也即它不会带上layout的渲染代码。它可以被用来作为页面区域的复用。 Widgets:如果partial view中需要很多的逻辑计算,那它就是一个空间(widgets)。它可以是一个HTML的标记区域。包含复杂的逻辑。 Helper class:如果view中我们需要一些代码片段来格式化数据或者生成HTML标签。我们就可以把他们放在helper class中而不是直接放在view中。Yii有一个强大的CHtml helper class可以产生常用的HTML代码。Helper Class可以放在自动加载目录中,这样它就可以不用显式地加载就可以被使用。 Controller Controller就像胶水一样,把model,view和其他components粘在一起,共同组成一个可以运行的网站应用。Controller负责直接处理用户的请求,也就是说,controller: 1. 直接访问$_GET, $_POST,和其他包含用户请求的PHP变量。 2. 创建model的实例并且控制它的生命周期。比如,在一个典型的model update的动作中,controller可以先创建model的实例;然后用用户输入填充这个model实例。在成功存储model后,controller可以把用户浏览器重定向到model的详情页。注意,实际的存储model的实现代码需要写在model中而不是controller。 3. 应该避免包括SQL语句,它应该在model中。 4. 应该避免包括HTML语句,它应该在view中。   在一个设计良好的MVC应用中,controller应该非常短小,可能只包含几十行代码。大量的代码在model中,因为它需要处理数据。并且每个应用的model的业务逻辑都不尽相同。