zendFramework——index.php"入口文件的設定"

Zend Framework入口文件的設定

ZendChina資訊:ZF學習中,最讓新人頭痛的事就是入口文件的設定 php

index.php (./public/index.php)

<?php

// 全局處理,主要包括報錯級別,時區
error_reporting(E_ALL|E_STRICT);                  //調試時能夠設置爲E_ALL
date_default_timezone_set('Etc/GMT-8');           //php5須要設置時區,注意GMT後面的-8符合與真實的是相反的

//php_ini的全局引用路徑等的設置,這裏最重要的是將咱們創建的./library/目錄加入到了全局引用路徑中,這樣才能訪問Zend框架提供的功能
set_include_path('.'.PATH_SEPARATOR.'./library'.PATH_SEPARATOR.'./application/models/'.PATH_SEPARATOR.get_include_path());

//引用ZF的類加載類,用於經過ZF更加簡潔地引用須要的ZF其它類文件,固然這個文件就須要經過傳統方式引用了
include "Zend/Loader.php";

// 加載ZF應用中經常使用的ZF類
Zend_Loader::loadClass('Zend_Controller_Front');          //必須引用,控制器類
Zend_Loader::loadClass('Zend_Config_Ini');                //用於讀取ini類型的配置文件
Zend_Loader::loadClass('Zend_Registry');                  //用於註冊對象供整個應用空間使用,如數據庫連接對象
Zend_Loader::loadClass('Zend_Db');                        //數據庫類
Zend_Loader::loadClass('Zend_Db_Table');                  //數據庫擴展類,用於與表相關的操做

// 加載配置。主要是數據庫相關的配置,能夠分多個組,便於更改,建議使用,也能夠直接在這裏配置
$config = new Zend_Config_Ini('./application/configs/config.ini', 'general');
$registry = Zend_Registry::getInstance();
$registry->set('config', $config);

//初始化數據庫對象,並註冊到整個應用空間
$db = Zend_Db::factory($config->db->adapter,$config->db->config->toArray());
$db->query('SET NAMES gbk');
Zend_Db_Table::setDefaultAdapter($db);
$registry->set('db',$db);

// 加載控制器,創建前端控制器對象,並設置控制器類路徑
$frontController = Zend_Controller_Front::getInstance();
$frontController->throwExceptions(true);
$frontController->setBaseUrl('/guestbook');   //主要在應用不在根目錄的時候使用
$frontController->setControllerDirectory('./application/controllers');

// 運行,這裏進行了錯誤處理,當ZF找不到想要的控制器時輸出ZF的錯誤信息,你也能夠進行自定義的處理
try{
    $frontController->dispatch();
}catch(Zend_Controller_Dispatcher_Exception $e){
    echo $e->getMessage();die;
}

?>

config.ini (./application/configs/config.ini)

[general] 
db.adapter = PDO_MYSQL 
db.config.host = localhost 
db.config.username = root 
db.config.password =  
db.config.dbname = zend


index.php詳細說明

/**
 * 本例演示僅用zend 實現完整的MVC
 */
$startTime=microtime(true);
define('ROOT',$_SERVER['DOCUMENT_ROOT']);
$libraryPath=ROOT."/library";
$zendPath=$libraryPath."/Zend";
$zendControllerPath=$libraryPath."/Zend/Controller";
set_include_path(
PATH_SEPARATOR . $libraryPath .
PATH_SEPARATOR . $zendPath .
PATH_SEPARATOR . $zendControllerPath
);    
//echo get_include_path(); html

/**
 * 引入所須要的類庫文件
 */
require_once './library/Zend/Controller/Front.php';
require_once './library/Zend/Db.php';
require_once './library/Zend/Db/Table.php';
require_once './library/Zend/Config/Ini.php';
require_once './library/Zend/Acl.php';
require_once './library/Zend/Acl/Role.php';
require_once './library/Zend/Acl/Resource.php';
//也能夠用下面的方法來加載
//Zend_Loader::loadClass('Zend_Config_Ini');
/**
 * 用單例模式建立一個前端控制器
 */
$front=Zend_Controller_Front::getInstance(); 前端

$front->setControllerDirectory('./application/zendmvc/controllers','zendmvc');
//$front->setControllerDirectory('./application/app2/controllers','app2');
/**
 * 正確的使用setControllerDirectory
 * 用數組存儲每一個模塊的路徑及模塊名,此模塊名前是url與控制器類的名稱的組成部份
 */   數據庫

$apps=array(
'default'=>'./application/index/controllers',
'zendmvc'=>'./application/zendmvc/controllers'
); 設計模式

$ACL=array('admin'=>'news','admin'=>'app1','user'=>'app2');
/**
 * 咱們能夠按以上方式設定'app11'=>'./application/app1/controllers',但對應的控制器中的類名也必需設定爲app11_indexController
 * 目錄能夠不修改
 */
//$front->setControllerDirectory($apps);
/**
 * 或是使用addControllerDirectory來添加模塊
 */
$front->addControllerDirectory('./application/index/controllers','default');
$front->addControllerDirectory('./application/zendmvc/controllers','zendmvc');
$front->addControllerDirectory('./application/zendacl/controllers','zendacl');
// *www.xxx.com/模塊名/控制器名/動做名/參數列表
//$front->addControllerDirectory('./application/index/controllers','index'); 數組

/**
 * 或是採用更方便的方式來進行,直接進行模塊所在目錄的設定
 * 採用這種方法,您只須要在application(或是別的你所設定的應用所在的目錄)下創建您的
 * 每一個模塊所屬的子文件夾後,addModuleDirectory會自動遍歷該目錄,並調用addControllerDirectory
 * 來設定每一個控制器的目錄,使大的工程文件在設定操做上更爲方便
 */
//$front->addModuleDirectory('./application'); 服務器

/**
 * 設定拋出異常,在調試期間最好打開
 * 另要注意,若是打開,則默認的errorController不起做用
 */
$front->throwExceptions(true);
/**
 * 開始分發
 */
$front->dispatch();
//require_once('application/app1/controller/userController.php'); mvc

/**
 * 訪問方法
 *www.xxx.com/模塊名/控制器名/動做名/參數列表
 * 模塊名必需要在index文件中經過setControllerDirectory或是addControllerDirectory定義
 * 控制器文件名必須按 控制器名+Controller.php來命名
 * 控制器類名必須按 模塊名+Controller來命名
 * 動做函數名必須按  動做名+Action來命名
 * 對應的view層下的scripts中,每個控制器對應一個同名的文件夾
 * 每個動做有一個對應的 按動做名+.phtml命名的頁面文件
 */
$endTime=microtime(true);
echo "<br>";
echo ($endTime-$startTime)*1000; app

?> 框架

另外一種方法:

Zend_Controller是Zend Framework的MVC體系的核心部份。MVC指Model-View-Controller,是一個用於分離應用邏輯和表現邏輯的設計模式。Zend_Controller_Front實現了Front Controller設計模式,全部的請求都經過front controller(前端控制器)並分發(dispatch)到不一樣的控制器來處理,分發的過程基於請求的URL。       Zend_Controller體系具備可擴展性,能夠經過繼承已有的類或者本身寫個新的類來實現各類接口和抽象類,也能夠編寫插件或者助手類(helper)來加強系統的功能。       在討論控制器以前,你應該先理解Zend Framework是如何處理HTTP請求的。默認狀況下,URL的第一個部份會映射到一個控制器,第二個部份則映射到控制器類中的Action(即控制器類內部的一個方法)。例如:URLhttp://framework.zend.com/roadmap/components,其服務器路徑爲/roadmap/components,則會映射到roadmap控制器和components Action。若是不存在action,則會調用index這個action。若是控制器不存在,則會自動調用index控制器。(按照Apache的命名慣例,自動映射到DirectoryIndex文件)        接下來,Zend_Controller的dispatcher會根據控制器的名稱找到具體的控制器類。一般它會把控制器名稱加上Controller。所以,上例中roadmap控制器與類RoadmapController相對應。       相似地,action會映射到控制器類中的一個類方法。默認情下,會被轉成小寫字母,而後加上Action字符串。所以,上例中components這個action與 componentsAction相對應。最終咱們訪問URL調用的是RoadmapController->componentsAction()。

相關文章
相關標籤/搜索