框架主要是為了提高開發效率、使得團隊開發人員之間的更容易溝通和協作以及提高應用程序的可維護性。學習了解一種或多種框架對實際項目的應用會有所幫助。
一、ZendFramework 的介紹:
ZendFramework(以下簡稱:ZF),以 Model-View-Controller(MVC)三層架構展開。將程序中的不同的部分獨立開來,使得程序的開發互不影響和後期維護更加容易。
ZF框架的設計思想和策略:
ZF采用了前端控制器(Front Controller)設計模式,它把所有用戶的請求發送到一個中心控制點,具體做法就是所有的請求都需要通過index.php入口(單入口可以配合Web服務器來實現,後面會提到)。然後通過 index.php 中的腳本把用戶請求分發到對應的控制器中,控制器負責調用模型中的邏輯(Model)和用戶界面(View)的呈現。
二、ZendFramework 的安裝、簡單實例
系統要求:ZendFramework-1.9.3 、CentOS 5.2+
1、下載 ZF(http://framework.zend.com/download/latest )
2、解壓將其庫類放到項目的根目錄中;如:/var/www/nbaplayers/library/Zend......
3、創建項目的基本目錄:
4、實例:
4.1、新建文件 /var/www/nbaplayers/index.php:
<?php
error_reporting(E_ALL|E_STRICT);//語句打開了錯誤輸出開關,用於代碼調試,正式發布的代碼應該屏蔽錯誤信息。
date_default_timezone_set('Asia/Shanghai');//設定時區
set_include_path('.'.
PATH_SEPARATOR.'./library'. //用於設定類庫的包含路徑,ZF的系統類庫就是在這裡指定的。
PATH_SEPARATOR.'application/models/'. //包含自定義類文件。
PATH_SEPARATOR. get_include_path()
);
require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload(); //自動加載類
$frontController = Zend_Controller_Front::getInstance();//取得Zend_Controller_Front類實例
$frontController->setControllerDirectory (array(
"default" => 'application/controllers',
)); // 指定一組控制器文件路徑,參數是數組。設置前端控制器,主要是讓控制器知道我們的的控制器類在哪裡
$frontController->throwExceptions(true);//讓前端控制器拋出所有的異常。 默認情況下,前端控制器將捕獲這些異常並將其人傳遞到 ErrorController 控制器,在開發過程,這樣錯誤容易發現。但在實際運行中,不能將這些錯誤直接顯示給前端用戶。
$frontController->setParam('noViewRenderer', true);// 指明不使用視圖,false 是默認值。
$frontController->setParam('noErrorHandler', false);
$frontController->dispatch(); //程序執行分發
?>
注意:如果你用的ZF是之前的版本的話,會出現以下提示:
Notice: Zend_Loader::Zend_Loader::registerAutoload is deprecated as of 1.8.0 and will be removed with 2.0.0; use Zend_Loader_Autoloader instead in /usr/local/zend/share/ZendFramework/library/Zend/Loader.php on line 207
那麼將:
require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload(); // 自動加載類
修改為:
require_once 'Zend/Loader/Autoloader.php'; // 自動加載類
$loader = Zend_Loader_Autoloader::getInstance();
$loader->setFallbackAutoloader(true);
$loader->suppressNotFoundWarnings(false);
就好了。具體可以看看ZF的官方說明。在Autoloader.php文件中,有一方法:
protected function __construct()
{
spl_autoload_register(array(__CLASS__, 'autoload'));
$this->_internalAutoloader = array($this, '_autoload');
}
用來實現自動加載類文件。
* spl_autoload_register — Register given function as __autoload() implementation
//設置對象的自動載入
4.2、新建文件 /var/www/nbaplayers/application/Controllers/IndexController.php:
<?php
class IndexController extends Zend_Controller_Action
{
function indexAction()
{
echo "Hello ZendFramework!";
}
}
?>
4.3 新建文件 /var/www/nbaplayers/.htaccess
RewriteEngine on
RewriteRule !/.(js|ico|gif|jpg|png|css)$ index.php
以上是說,啟動 RewriteEngine 引擎,並把對除js、ico、gif、jpg、png、css等圖片、js腳本、css的請求外都得經過index.php文件。當然上面的實例不創建這個也可以正常運行,但如果你使用ZF開發實際的項目,這就是必須的了。
4.4、運行:在浏覽器地址欄輸入http://www.domain.com回車,浏覽器將顯示結果:
Hello ZendFramework!
OK 完成!