Zend Framework学习笔记(一):Zend_Controller
Wednesday, August 20th, 2008本博客所有原创文章采用知识共享署名-非商业性使用-相同方式共享,转载请保留链接http://chaoqun.17348.com/2008/08/learn_zend_framework_zend_controller/ 前一段时间一直在看Zend Framework方面的东西,参照着设计模式阅读Zend Framework结构收获良多,我将以一系列的文章和大家一起探讨Zend Framework(文中将以ZF代替Zend Framework)。 ZF是Zend公司开发的一套PHP快速开发框架,类似的框架还有cakephp、codeigniter等,当然国内的也有一些这方面好的尝试,如FleaPHP&ThinkPHP,每个框架都有自己的特色,我这里只说一下ZF,ZF过于强大了以至很多人都觉得ZF是不是臃肿了?其实ZF在松散耦合方面做的非常的好,ZF的各个模块基本上都可以调出来单独使用,这就是很多人觉得ZF是PEAR2的原因。ZF的学习成本相对其他框架来说要高很多,当然也可以什么了解一点,然后写出只值“一点”的程序来,国内用ZF的大压力项目有6.cn,可惜Michael一直没有时间给我们分享更多,了解ZF可以关注一下phpeye,站长HaoHappy给我们贡献了ZF的中文手册,实在是一件功德无量的事情。 Zend Framework整个框架的核心的Zend_Controller,所以要学习ZF的同学最好把手册中Zend_Controller部分多看几遍,我们进入正题吧。 一、MVC的设计模式 一个良好的应用结构一般分为三层:Model层(一般是数据层)、View层(表现层)和Controller层(控制层或者说是逻辑层),底层数据和逻辑分离、逻辑与前台展现分离,这样的话程序的伸展性和可维护性都大大提高,下面的例子会将一个很糟糕的设计转化成一个PHP的MVC设计. 先看糟糕的程序吧: <?php $userID = 9527; /** * 开始连接数据库,查询数据库等等的操作,类似: * $db = mysql_connect('host', 'user', 'pwd'); * mysql_select_db('dbname'); */ // 假设最后你获得了用户名称 $userName = '超群.com' ?> <!-- 开始显示用户名称 --> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title><?php echo $userName;?>,你好</title> </head> <body> Hell,<?php echo $userName;?> </body> </html> 我们会看到一个文件里面混合着PHP和HTML代码,如果美工修改了模板或者业务逻辑稍有变化都需要改大量的程序,而且还有一个致命的问题:代码复用,如果另外的地方也需要获得用户名称,你是不是要重新写一遍同样的代码呢?记住:重复代码是邪恶的。 然后再看一下MVC的设计,我们把业务划分为三块:获得用户名称(数据层)、控制用户名称显示(控制层)、用户名称显示模板(表现层): 数据层: 控制层: 表现层: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>{$userName},你好</title> </head> <body> Hell,{$userName}> </body> </html> 这个例子非常简单,但确能给各位一个关于MVC在PHP的呈现结构。 二、Zend_Controller 一般的应用手册上面已经写的很详细了,建议仔细阅读手册,我这里想讨论的是不用mod_rewrite然后还想用传统的目录结构怎么处理?我想很多人的困在这里,手册上推荐的目录结构是: application/ controllers/ IndexController.php ...