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()。

相关文章
相关标签/搜索