框架主要是為了提高開發效率和支持多人團隊開發而發明的。傳統的平面式開發總是讓每個軟件項目從零開始,程序員不得不重復“制造輪子”的工作;而界面 (Html+CSS+Javascript)與程序邏輯的混雜使程序員與界面制作的角色很難分離開來,這有可能使得應用程序在其生命周期中變得無法維護。 ZF的做法是,為了提高應用程序的可維護性,它將程序的代碼分成如下三個不同的部分(通常也是獨立的文件): 模型(M):應用程序的模型部分。關心的是顯示的數據的細節。模型通常關注的是業務邏輯,以及如何從數據庫中存取數據。在具體的代碼中表現為一個一個不同的類,可以看做是一個用戶自定義的類庫。 視圖(V):視圖關心的是用戶顯示的內容,它通常是Html。 控制器(C):控制器將模型和視圖結合起來,保證將正確的數據顯示到頁面上。 也就是說,Zend Framework使用Model-VIEw-Controller(MVC)架構。它將程序中不同的部分獨立開來,使得應用程序的開發和維護變得更加容易。 1,ZF框架的設計思想和策略 ZF采用了前端控制器(Front Controller)設計模式,它把所有用戶的請求發送到一個中心控制點,具體做法就是所有的請求都需要通過index.php進入。然後通過 index.php中的腳本把用戶請求分發到對應的控制器中,控制器負責調用模型中的邏輯和用戶界面的呈現。 2,Apache對ZF的支持 為了實現ZF的設計思想,需要Web服務器的支持。apache服務器是通過其mod_rewrite功能來實現的。 2.1配置mod_rewrite擴展需要去掉Apache的配置文件httpd.conf中以下語句前的注釋符號#,使配置生效,即裝載mod_rewrite.so模塊。 LoadModule rewrite_module modules/mod_rewrite.so 還必須保證Apache已配置成支持.htaccess文件的模式。通常這可以通過在httpd.conf中將 <Directory "C:\Program Files\Apache Software Foundation\Apache2.2\htdocs"> Options Indexes FollowSymLinks #AllowOverride None AllowOverride All Order allow,deny Allow from all </Directory> 中的AllowOverride None改成AllowOverride All來實現。如果沒有正確配置mod_rewrite及.htaccess,那麼除了首頁外將不能看到任何其它的頁面。 保存配置,重啟apache服務,使配置生效。 2.2 .htAccess文件的內容: RewriteEngine on RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php 意思是,讓RewriteEngine引擎啟動,並把對除過js、ico、gif、jpg、png、css等圖片、JS腳本、CSS的請求,都發送到index.php文件中。 3,第一個程序的目錄結構 在htdocs下建立以下2個文件夾:phpchina1.com和app_phpchina1.com。 app_phpchina1.com下建立以下文件夾controllers、models、views。 這樣一來,典型的文件夾結構形如: …htdocs app_phpchina1.com controllers models views library Zend phpchina1.com phpchina1.com文件夾下存放index.php和.htaccess文件; Controllers存放控制器文件; models存放控制器文件; views存放視圖文件; 注意這只是ZF所推薦的文件夾的組織形式,但並不是必須的形式。實際項目中可以根據自己的具體情況靈活變通,這一點本教程的後面會詳細的探討。如果應用特別簡單,models和views文件夾也許也用不到,我們下面的“最簡單的ZF程序”即是如此。 4,最簡單的ZF程序:Hello PHPChina1.com! 激動人心的時刻到了,我們講運行我們的第一個ZF程序。 Index.php文件內容如下: <?php error_reporting(E_ALL|E_STRICT); //設定時區 date_default_timezone_set('Asia/Shanghai'); //指明引用文件的路徑 set_include_path('.' . PATH_SEPARATOR . '../library/'. PATH_SEPARATOR . '../App_phpchina.com/models/'. PATH_SEPARATOR . get_include_path()); include "Zend/Loader.php"; Zend_Loader::registerAutoload(); $fc = Zend_Controller_Front::getInstance(); $fc->setControllerDirectory(array( "default"=>'../app_phpchina1.com/controllers', )); $fc->throwExceptions(true); $fc->setParam('noVIEwRenderer', true); $fc->setParam('noErrorHandler', false); //開始運行程序 $fc->dispatch(); ?> Controllers文件夾下IndexController.php文件的內容: <?php class IndexController extends Zend_Controller_Action { function indexAction() { echo "Hello PHPChina1.com!"; } function noRouteAction() { echo "Sorry, this page cannot be Access."; } } ?> 運行: 在浏覽器地址欄輸入http://phpchica1.com:8080回車,浏覽器將顯示結果: Hello PHPChina1.com! 如果看到上述信息,恭喜你,成功了!