日期:2014-05-20  浏览次数:21144 次

Getting Started with Zend Framework 小结

Zend 环境的配置参见上一篇博文。这里主要是根据《Getting Started with Zend Framework》一文的内容,结合自己的理解,做个记录。
Zend框架的核心思想是MVC框架。MVC这个概念,最早接触算起来也有七八年之久了,但是随着这几年工作接触的项目的深入,对它的理解也逐渐深入,从似是而非,到模糊不清,到逐渐清晰,又到不知所云,又拨云见雾,如此反复,发现这的确是个伟大的思想实践。很多时候,扯太多的概念没有除了唬人没有太多的意义,而MVC这个简洁的三角框确实解决问题的一条必杀思路,诠释着简单就是美的定理。很多年前,在听一位长者的讲座上,提到分类是解决问题的不二法门,而MVC的思路给的是分类的一条基本方法,对做IT系统的指导意义非凡。在PHP中,zend框架似乎也是基本建立的MVC的框架思路之上,将web应用宏观中通过Model(M)/Viewer(V)/Controller(C)区分开来,提高系统的开发效率、降低耦合性,提高可维护性等等。这与普遍的java框架中的道理又是相同的,Spring,Structs等等,都是MVC的实例。在OO的思想里,MVC就是一个伟大的Class,而Zend,SSH等都是他的Instance,相信随着知识的深入,MVC仍将会有惊人的作用挖掘出来。

那么好了,有了以上的理解,Zend框架就不难理解了。Zend具体来说,他提供了一套工具ZendTool,可以自动帮开发者完成一些任务,比如上一篇博文里已经提到过的建立工程,此外还有,建立action,table model,viewer等等,这些重复性的工作,可以很好的进行工程文件目录的管理与配置,让开发者专注于系统逻辑的实现。那么就在zf-tutorial这个工程的基础之上,进行梳理。按照MVC的思路进行整理。

在工程展开之前,先进行工程的一般配置,修改zf-tutorial/application/configs/applicaiton.ini, 加入时区参数
phpSettings.date.timezone = "Asia/Shanghai"
这个参数对PHP的日期和时间函数有影响。

另外,zf-tutorial这个教学Project要做的是实现一个建议的web site,提供一个默认主页,主页显示所有的album信息,另外提供增删改功能,可以对album的信息进行管理。那么相应的,系统需要一个默认的index action,add,delete,edit等三个actions,这些action会在Project的IndexController.php中创建。

1. 创建Controller

使用zend tool, 在cmd窗口,跳到zf-tutorial目录,执行如下命令:
zf create action add Index
zf create action delete Index
zf create action edit Index

这些命令会在zf-tutorial/application/controllers中创建三个方法,addAction, deleteAction,editAction,同时呢,也会创建对应的viewers,具体来说就是在zf-tutorial/application/views/scripts/index中创建对应的add.phtml,delete.phtml,edit.phtml文件,用作View。

2. 通过第一步,MVC,已经基本搭好了,V,C两部分,剩下的就需要搭建Model了。
Project的application.ini可以看到一个交通中心,他负责联络各个部分,使整个系统运转起来。所以Project与数据库的连接,也需要在这里进行设置,如下:
resources.db.adapter = PDO_MYSQL
resources.db.params.host = localhost
resources.db.params.username = rob
resources.db.params.password = 123456
resources.db.params.dbname = zf-tutorial
这里配置好了,但是数据库并没有建好,建库、建表,如下:

create database zf-tutorial;
CREATE TABLE authors(
author_id int(11) NOT NULL auto_increment,
title_id int(11) NOT NULL DEFAULT '0',
author varchar(125) default NULL,
PRIMARY KEY (author_id)
)ENGINE=MYISAM DEFAULT CHARSET=gbk;

INSERT INTO authors VALUES(1,1,'Ellen Siever'),(2,1,'Aaron Weber'),
(3,2,'Arnold Robbins'),(4,2,'Nelson H.F. Beebe');


ok,数据库就建好了,但是Model的部分还仅仅是做了一大半,关键的部分是映射到zend框架内。
使用zend tool
zf create db-table Albums albums
这个命令会在application\models\DbTable中创建Albums.php文件,这就是table的映射文件,即zend中的model,通过这一步,数据库中的albums表就变身为php中的对象,完成了对数据层的封装。MVC的雏形也就形成了。
为了配合View和Controller的使用,增加四个辅助方法,即对数据的操作方法getAlbums(),addAlbums(),deleteAlbums()和editAlbums(),具体可以参考[1]中的对应章节。这里呢,zend框架辅助完成了数据到php的映射,隐藏了对数据库的操作,可以理解为封装。

3. 以上完成了MVC最骨感的部分,但是还远远不够。
为了让系统的功能看起来像个样子,需要对view进行一下粉饰,毕竟UI对用户具有最终的杀伤力。这里就涉及到layout了。使用zend tool 来完成:
zf enable layout

这里zend会创建application\layouts\scripts\layout.phtml.特别的,又要用到交通枢纽application.ini,zend会自动在其[production]部分添加如下的配置语句:
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
也就是说,把layout和view给联络起来,用来装饰project的view,目的只有一个,让view变的好看。
当然,要想让view的代码变的简洁易维护,还要好看,离不开css,在zf-tutorial/application/layouts/scripts/layout.phtml中添加css的引用<?php echo $this->headLink()->prependStylesheet($this->baseUrl().'/css/site.css'); ?>,然后在public目录下创建css文件夹,并把site.css编辑好放在里面。

ok,到这里,整个的project前期的工作可以说已经基本完成了,剩下的,就是专注于业务了,在action里添加代码,完善model内的方法,以及优化调整view,就变的轻松愉快了。

[1] Getting Started with Zend Framework,Document Revision 1.7.7,Rob Allen, www.akrabat.com