Zend Framework+smarty用法实例详解

一、Zend Framework简介

Zend Framework使用模型-视图-控制器(Model-View-Controller(MVC))结构。这个用来把你的程序分离成不同部分使得开发和维护变得容易。

运行Zend Framework需要:PHP 5.1.4 (或更高) 、Web 服务器支持 mod_rewrite功能,本实例采用Apache。 从这里下载 Zend Framework,有两种格式.zip或者.tar.gz。

二、Zend Framework的配置

1、目录结构

虽然Zend Framework 没有强求使用一个标准的目录结构,但是还是有一些通用的目录结构。这个目录结构假设你完全控制Apache 的配置。(下面以本机做例子,各位需根据自己的情况进行更改,我的服务器的根目录指向的是Web文件夹)

引用:

Web/
test/
/webapp
/controllers
/models
/templates
/templates_c
/library
/webroot
/images
/js
/css

我们已经把程序中的模型、视图和控制器的文件分离到不同的子目录中。支持的图像,脚本和CSS 文件被存放在webroot 目录下的不同子目录中。下载的Zend Framework 文件放在 library 目录下。如果我们还需要其他库文件,都可以放在这里。在这个实例中,我们使用到了Smarty模版技术,所以Smarty 的库文件我们也应该放在library文件下!

2、启动文件

1) 配置.htaccess

我们使用单一的入口文件index.php来对我们的程序进行访问,这给我们提供了程序中所有页面的中心点并确保运行环境配置正确。我们用.htaccess 文件来实现这个目的,添加.htaccess 文件在test 的根目录中,内容如下:

RewriteEngine on RewriteRule !".(js|ico|gif|jpg|png|css)$ index.php

2)配置Apache
与此同时,我们还需要对apache进行一些设置,打开apache的配置文件 httpd.conf。

1、找到“#LoadModule rewrite_module modules/mod_rewrite.so 这句话,把前面的#去掉!

2、然后再找到“AllowOverride None 改成AllowOverride All,重新启动apache即可。

3、启动文件index.php
index.php放在test的根目录下,下面是index.php的内容::

<?php //打开错误提示 error_reporting(E_ALL|E_STRICT); //设定时区 date_default_timezone_set('Asia/Shanghai'); //指明引用文件的路径 set_include_path('.' . PATH_SEPARATOR . './library/'. PATH_SEPARATOR . './webapp/models/'. PATH_SEPARATOR . get_include_path()); //必须手动加载Loader.php include "Zend/Loader.php"; //自动加载类,使用时,直接实例化使用 function __autoload($class){ Zend_Loader::loadClass($class); } //getInstance()方法用来获取前端控制器实例 $frontController = Zend_Controller_Front::getInstance(); //设定前端路由器的工作目录 $frontController->setControllerDirectory(array("default"=>'./webapp/controllers')); //抛出异常 $frontController->throwExceptions(true); //设置基地址,方便以后url的跳转用户,.注意,区分大小写! $frontController->setBaseUrl('/test'); //使用smarty模版需关闭本身的视图助手. $frontController->setParam('noViewRenderer', true); // 关闭错误提示,发生请求错误时候,转到ErrorController的errorAction控制器 //$frontController->throwExceptions(false); //对。。进行注册 Zend_Registry::set('font', $frontController); //------------配置Smarty模版 ---------------- include 'Smarty/Smarty.class.php'; /** * 对smarty模版进行初始化 **/ $views = new Smarty(); //$views->left_delimiter = "{{"; //$views->right_delimiter = "}}"; $views->compile_dir = './webapp/templates_c'; $views->cache_dir = './webapp/templates_c/cache_c'; $views->template_dir = "./webapp/templates"; function smarty_block_dynamic($param,$content,&$views) { return $content; } $views->register_block('dynamic','smarty_block_dynamic',false); Zend_Registry::set('views', $views); //开始运行程序 $frontController->dispatch(); ?>

4)启动文件说明

Zend Framework 是这样设计的,所有的文件必须包含在 include_path 中。我们也把我们的模型目录包含在 include path 中,这样我们以后就能很容易加载我们的模型类。一开始,我们必须 include Zend/Loader.php,这样我们就能访问Zend_Loader 类,在Zend_Loader 类中有静态方法使我们能够加载其他Zend Framework 类,例如:

Zend_Loader::loadClass('Zend_Controller_Front');

Zend_Loader::loadClass 加载已经命名的类。它是把下划线转换成路径隔离符来实现的,并在最后加上.php 后缀。这样,类Zend_Controller_Front 将从Zend/Controller/font.php 加载。如果你在你的类库里使用相同的命名规则,就可以用Zend_Loader::loadCass()来加载它们。我们需要加载控制器类和路由类。

前端控制器用路由类来映射请求的 URL 到正确的 PHP 函数,然后显示页面。为了能使路由工作,需要解决 URL 的哪一部分是指向index.php 的路径,这样它就可以在那个点后面寻找url 元素。

我们需要配置前端路由器,这样它就知道从哪个目录里找出我们的控制器。

$frontController = Zend_Controller_Front::getInstance(); $frontController->setControllerDirectory('./application/controllers');

设置抛出异常,但是在服务器真正工作以后,我们不应该显示错误信息给用户看。

$frontController->throwExceptions(true);

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/797764533e578a78b66a9a12ef980183.html