Zend Framework是为PHP 5开发的一套开源面向对象的Web应用程序框架。该框架经常被称为“组件库”,这是因为它由许多松耦合的组件组成,并可以或多或少地无依赖地应用于你的应用系统。而且ZF还提供了一套高级的model-view-controller (MVC)实现,你可以使用它为你的应用程序建立基础结构。除了ZF组件的简短描述外,完整组件列表你可以在这里找到。(Quick Start)
模型 (model) |
应用程序的模型部分关心的是欲显示的数据的细节,是应用程序的业务逻辑部分,是如何使用数据库来读取和保存数据。 |
视图 (view) |
视图关心的是用户显示的部分,它通常是HTML。 |
控制器 (controller) |
控制器将特定的模型和视图结合起来,保证将正确的数据显示到页面上。 |
Zend Framework需要PHP 5.1.4或更高版本以及支持mod_rewrite功能的Web服务器的支持。
httpd.conf
)和目录级的(.htaccess
)配置都有效,还可以生成最终请求字符串。此重写操作的结果可以是内部子处理,也可以是外部请求的转向,甚至还可以是内部代理处理。但是,所有这些功能和灵活性带来一个问题,那就是复杂性,因此,不要指望一天之内就能看懂整个模块。(参考)RewriteEngine On
"和"Options FollowSymLinks
"。如果管理员禁止了该目录的FollowSymLinks
特性,重写引擎将不会工作,这样做的原因是处于安全方面的考虑。解压后Zend Framework包含两个重要的部分 library 和 incubator。library目录为官方发布的代码,使被严格审查过的代码,包含了ZF的所有组件;incubator目录中是已经通过建议程序但尚不成熟的代码,故未包含在library目录中。所以解压后library目录是我们所必须的,而且该目录一定要被你的PHP include_path环境变量引用。
创建MVC工程目录结构:
library/ <-- 所有第三方库
Zend/ <-- Zend Framework所在的目录,即上面所说的library目录中Zend目录
application/ <-- 基于Zend Framework的应用程序所在目录
controllers/ <-- 所有控制器所要放置的目录
models/ <-- 所有模型所要放置的目录
views/ <-- 所有视图所要放置的目录
scripts/
index/ <-- 一个对应控制器的视图目录
public/ <-- web root, 有些例子中使用public这个名字
images/
css/
js/
.htaccess <- Rewrite规则,以及一些PHP配置可以在该文件中定义
index.php <- 请求的入口点
public目录应该包含所有通过Web直接访问的文件。
Zend Framework 的 MVC 实现利用了 Front Controller 模式,如下图:
开启Apache的Rewrite模块,我在测试的时候使用了目录级的请求Rwrite方式,所以在httpd.conf文件的末尾添加了如下配置:
Alias /zftest "F:/test.zend.mvc/public" <Directory "F:/test.zend.mvc/public"> Options FollowSymLinks AllowOverride ALL </Directory>
后面我可以用 http://localhost/zftest 来访问ZF框架的应用,而不会影响我的Apache下的其他应用程序。
至此,我们暴露给外界的是public目录,但是并非目录中所有内容我们都希望外界能够直接访问,这也是出于安全性考虑,当然也是ZF MVC框架单一入口点所要求的。所以,这里我们需要添加一个.htaccess文件,来定义相关请求转发到应用程序的入口点(index.php)文件,内容如下:
# php based view scripts. This allows for a shorter and cleaner view # script, After all PHP IS A TEMPLATING LANGUAGE :) php_value short_open_tag "1" # Set the error_reporting to E_ALL|E_STRICT # Since .htaccess only take an integer (and cannot render the PHP # contstants, we need to find out what the integer actuall is) # # > php -r "echo E_ALL|E_STRICT;" # 8191 php_value error_reporting "8191" # The following display_*error directives instruct PHP how to display # errors that might come up. In a production environment, it might # be good to set these values inside the actual VHOST definiation. # NOTE: these display error ini's should most likely be OFF # in your production environment php_value display_startup_errors "1" php_value display_errors "1" # NOTE: by setting the above php ini values, we are ensuring that # regardless of the servers php.ini values, we can be assured that # our application will have these set values set on every request. # 开启Rewrite引擎 RewriteEngine On # 设置目录级Rewrite的基准URL,这里与前面配置的别名相对应 RewriteBase /zftest # 设置Rewrite条件,即如果请求目录、常规非空文件或者符号连接存在,我们将不进程Rewrite处理 RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] # 否则,所有请求都将转由index.php文件来处理 RewriteRule ^.*$ index.php [NC,L]
现在可以测试一下, index.php是否可以访问,在index.php文件中添加如下内容:
<?php echo 'Hello, Zend Framework!';
然后,打开浏览器,在地址栏中输入 http://localhost/zftest 测试下页面上是否会显示'Hello, Zend Framework!' 字样。
我这里并不是忘记了书写PHP标签 ?> ,而是为了避免在响应请求时输出不必要的空格。这种书写方法是Zend Framework coding standards所推荐使用的。
后面内容,待续!(本以写完,哭中ING。。。)