20

其实如果想用zend framework搭建一个可用的web应用,可以直接看zend framework的官网上quickstart,只可惜没有中文版。ZF手册的汉化进度也似乎并不快,猜想可能和ZF不断的更新有关。这里并不详说ZF手册中有的内容,也不准备做教程,只是记录一下在使用ZF过程中,遇到的一些问题和值得注意的地方,望有助于大家在使用过程中若也遇到相同问题时能迎刃而解。

鉴于ZF不断的进步,必须说明版本,我看了许多过去ZF版本的资料,发觉和现在最新版本差异是很大的。本文使用的是zend framework 1.9.x。

准备工作:

首先当然是要确定你的apache加载了rewrite模块,加载方法也简单,可以自行google。

这里想说的是,加载了rewrite模块后,还需要注意别忘了在httpd.conf里面设置AllowOverride all。

最后就是.htaccess文件,我没有改动,直接使用的手册中的。附上:

SetEnv APPLICATION_ENV development

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

快速搭建:

首先建议你已经看过了相关的手册或教程,然后要搭架一个ZF的web应用就简直是太简单了,因为你现在可以使用官方提供给你的无比强大的命令行辅助工具--zf Command Line Tool。这个神器,你可以在官网上下载到(下载full package后可以在其bin目录下找到该工具,windows下是个bat文件。unix是个bash文件。)。你唯一需要做的就是在命令行下输入一句命令而已。如官方网站上写的:

# Unix:
% zf.sh create project quickstart

# DOS/Windows:
C:> zf.bat create project quickstart

之后你便可以得到一个可用的,标准的应用程序。
你可将其放置到本地的www目录下访问试试,如果人品没问题的话,你应该可以看到一个ZF的欢迎界面。

目录结构:

ZF目录其实是可以随意的,只要你自己会配置,如果你只需要一个模块,那么刚才那个官方命令行工具所创造出的目录结构就会是很完美的了,但如果你需要使用多个模块,那使用我下面的这种也许也不错。

.
|– application
|   |– Bootstrap.php
|   |– configs
|   |– data
|   |– layouts
|   |   `– scripts
|   |       `– layout.phtml
|   |– modules
|   |   |– blog
|   |   |   |– Bootstrap.php
|   |   |   |– controllers
|   |   |   |– models
|   |   |   |– templates_c
|   |   |   `– views
|   |   |– default
|   |   |   |– controllers
|   |   |   |– models
|   |   |   |– templates_c
|   |   |   `– views
|   |   `– profile
|   |       |– controllers
|   |       |– models
|   |       |– templates_c
|   |       `– views

|   `– templates
|       |– error.tpl
|       |– footer.tpl
|       |– header.tpl
|       `– sidebar.tpl
|– library
|   |– Command
|   |– Database
|   |– Lds
|   `– smarty
|– public
|   |– css
|   |– images
|   |– index.php
|   |– js
|   |– share
|   `– temp
`– tests
|– application
|– library
|– log
`– phpunit.xml

应该我手上没有hello world一般的简单实例,这里贴的其实是一个稍微完整的web应用(包含了smarty,phpunit等内容)。但也可通过单看粗体部分对ZF的多模块目录结构窥见一斑。

注意的是,你需要通过手工配置来告诉ZF你的模块目录,在application.ini加入以下:

resources.frontController.moduleDirectory = APPLICATION_PATH “/modules”

命名方式

建议使用ZF前,必须要看下ZF官方的命名约定那节。这是非常必要的。

这里需要注意的是,目录的大小写问题。我是在linux测试的,目录和类名大小写问题觉得有以下几个,看实例,前面是类名,后面是路径:

class Default_Model_Persons

=> modules/default/models/Persons.php

class Prefile_Model_LoginFormCheck

=> modules/prefile/models/LoginFormCheck.php

class Database_Notes

=> library/Database/Notes.php

从上面可以看出来,“model”在类名中是大写,但在目录中可以为小写。(应该是自动转换了)
但是library中(或其他你自定义的include目录下)的命名规则是严格的,若要自动加载,路径和类名中的大小写都得匹配。

配置启动

目前ZF的bootstrap方面已经改进许多,不再像之前需要在index.php中设置一大堆东西。而如今boot主要靠两个文件

配置文件 : application/config/application.ini

Bootstrap : application/Bootstrap.php

而使用官方提供的zf Command Line Tool所创造出来的这两个文件的初始状态是最完美的实例,这里也就不贴我的了,我的手上的都已经修改到没有任何说明意义了。

未完待续…