第二十章:Zend Framwork 框架
2:Zend Framwork 环境搭建
1)环境配置:使用ZF框架进行项目开发,首先需要对PHP运行环境进行配置,从而使整个运行环境能够支持ZF的各个组件和MVC运行机制。从ZF的MVC运行机制可以知道,所有HTTP请求都需要访问 index.php 引导文件,而实现这个功能就需要使用Apache的 mod_rewrite 功能。由于ZF的数据库访问是基于PDO的,所以需要开启PHP的PDO_MySQL扩展
(1)开启Apache的mod_rewrite功能
进入Apache安装目录下的conf 子目录,打开该目录的httpd.conf 文件,去掉 #LoadModule rewrite_module modules/mod_rewrite.so的#注释标记,这样就可以加载 mod_rewrite.so 模块。使Apache加载 mod_rewrite.so 模块后还需要指定 rewrite 生效的目录,这里指定 Apache 默认主目录为rewrite 生效目录。在httpd.conf 文件中找到 “DocumentRoot” 配置项,将该配置块中的 “AllowOverride None” 改为 “AllowOverrid All”。
(2)启用PHP的PDO_MySQL 扩展——在php.ini文件中,找到 ;extension=php_pdo_mysql.dll 并去掉其注释。开启PDO_MySQL扩展后,还需要查看PHP安装目录下的 ext 子目录中是否存在 php_pdo_mysql.dll 文件和 php_pdo.dll 文件,如果不存在则需要下载这两个 dll 文件,然后复制到该子目录中。重启apache 服务器使配置生效。
注意:为能完全发挥ZF各组件的功能,建议使用PHP 5.2.6 或以上版本
注意:在PHP最新版本(PHP5.3.6)以上两个功能都已经默认开启!
3:框架架构——ZF框架搭建
1)手工方式搭建:
(1)创建工程test,在test目录下创建程序的根目录public,并在public目录下创建引导文件 index.php。代码如下:
<?php /* PHP的两个常量的作用 DIRECTORY_SEPARATOR:路径分隔符,linux上就是‘/’ windows上是‘\’ PATH_SEPARATOR:include多个路径使用,在windows下,当你要include多个路径的话,你要用”;”隔开,但在linux下就使用”:”隔开的。 所以编写程序时最好用常量 PATH_SEPARATOR 代替,否则如果系统从linux移植到win系统或反过来移植会出错! get_include_path取得当前已有的环境变量,加上前面的设置就是新的系统include */ set_include_path ('../library'.PATH_SEPARATOR.get_include_path() ); //设定路径 //调用Zend类库 require_once 'Zend/Application.php'; //读取配置文件 $application = new Zend_Application('project', '../application/configs/application.ini '); //运行方式: 启动文件->运行 $application->bootstrap()->run();
上述代码中,使用 set_include_path() 方法,包含 library 目录,library 目录用于存放程序所依赖的类库、使程序在运行时能够直接找到这些类。ZF提供了 Zend_Application 组件,所有配置在扩展名为 ini 或 xml 的配置文件中指定,并通过 Zend_Application 组件进行解析。Zend_Application 组件的构造函数包含两个参数,其中第一个参数用于指定配置文件中环境参数的名称,第二个参数用于指定配置文件的位置。
实例化Zend_Application 组件,然后调用该组件的 bootstrap() 方法生成启动类对象,然后调用启动类的 run() 方法运行程序
说明:在index.php文件中,没有加入结束符 "?>",这是因为在文件结尾处它并不是必需的,而且这样也可以避免产生一些难于调试的问题,还可以防止非法注入
(2)在public 目录下创建URL 重写文件 .htaccess,将所有不能映射到磁盘上已存在的文件的URL都要index.php来代替:
RewriteEngine on RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
(3)修改application.ini 配置文件:
[project] //头部标识 bootstrap.path = "../application/Bootstrap.php"; //启动文件路径 bootstrap.class = "Bootstrap"; //启动类名 phpSettings.display_errors = 1; //错误类型 phpSettings.date.timezone = "Asia/GMT-8"; 时间区域 resource.frontController.controllerDirectory = "../application/controller"; //控制器路径
(4)编写启动类,代码如下:
<?php class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { public function _initAutoload(){ $moduleAutoloader = new Zend_Application_Module_Autoloader(array('namespace'=>'', 'basePath'=> '../application' )); return $moduleAutoloader; } }
上述代码中创建了启动类,在_initAutoload() 方法中实例化 Zend_Application_Module_Autoloader 对象并返回,目的是使启动文件自动加载模块资源,设置的底层路径为应用程序文件夹application,这样开发人员在编写程序时,就可以按照ZendFramework 的目录结构引用类,而不需要使用 require()等包含函数包含要引用的类。
在启动类中以 _init 开头的方法被当作资源方法自动运行,如果方法存在返回值,会被作为资源保存
(5)创建控制器
Zend Framework 如何处理HTTP请求:默认情况下,URL的第一个部分会映射到一个控制器,第二个部分则映射到控制器类中的Action(缺少则为index),然后ZF的转发器会根据控制器的名称找到具体的控制器类。通常会把控制器名称加上”Controller“,控制器第一个字母大写。类似的,Action会映射到控制器类中的一个类方法。默认,会被转换成小写字母,然后加上Action:
<?php //创建IndexController 控制器 class IndexController extends Zend_Controller_Action { //创建 indexACtion 动作 public function indexAction() { //为视图变量title初始化 $this->view->assign('title', 'Zend Framework 环境初始搭建'); $this->view->assign('body', '欢迎您搭建ZF成功!'); } }
(6)创建视图——默认视图保存路径为与 Controllers 同级目录下的 views 目录的 scripts 子目录中,视图文件则为scripts目录下的 index/index.phtml
<?php echo $this->escape($this->title); ?> <?php echo $this->escape($this->body); ?>
2)使用Zend Studio开发工具搭建Zend Framework的MVC框架结构
3:Zend Framework 中的常用组件
1)Zend_Auth 认证——Zend_Auth只涉及认证而不是授权。认证被宽松地定义为基于一些证书(credential)来确定一个实体(例如身份)是否确实是其所声称的。而授权是一个过程,决定是否允许一个实体对其他实体进行访问、执行操作。
注意:Zend_Auth 中不能使用 new 操作符和 close 关键字,而是需要使用 Zend_Auth::getInstance()来代替:static Zend_Auth::getInstance()
2)Zend_Db数据库操作
3)Zend_Cache 精细缓存
4)Zend_Layout站点布局
5)Zend_Paginator数据分页
6)Zend_Mail发送邮件