ZF学习中,最让新学员头痛的事就是入口文件的设定,我结合我在php成都培训中心教学的一些心得,做了下面的标准入口学习代码,希望对大家有所帮助。代码有详细的注释,应该能看懂了
<?php
//echo "哈哈,回来了吧";
//exit();
/**
* 本例演示仅用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();
/**
* 引入所需要的类库文件
*/
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');
/**
* 访问方法
* www.xxx.com/模块名/控制器名/动作名/参数列表
* 模块名必须要在index文件中通过setControllerDirectory或是addControllerDirectory定义
* 控制器文件名必须按 控制器名+Controller.php来命名
* 控制器类名必须按 模块名+Controller来命名
* 动作函数名必须按 动作名+Action来命名
* 对应的view层下的scripts中,每一个控制器对应一个同名的文件夹
* 每一个动作有一个对应的 按动作名+.phtml命名的页面文件
*/
$endTime=microtime(true);
echo "<br>";
echo ($endTime-$startTime)*1000;