Zend Framework使用模型-視圖-控制器(Model-View-Controller(MVC))結構。這個用來把你的程序分離成不同部分使得開發和維護變得容易。
運行Zend Framework需要:PHP 5.1.4 (或更高) 、Web 服務器支持 mod_rewrite功能,本實例采用Apache。 從這裡http://framework.zend.com/download下載 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);
由於在本實例中我們使用Smarty模版技術。所以我們關閉ZF本身自帶的 view。$frontController->setParam('noViewRenderer', true);設置基地址,方便以後設置url來進行跳轉。$frontController->setBaseUrl('/test');Zend_Registry::set('font', $frontController);接下來,我們對Smarty進行設置。首先我們在類庫中引用了Smarty.class.php這個類。並且對它的路徑進行了設置,以便讓ZF知道它的位置。