解读Zend框架(四) 引导文件

根据上回的项目结构介绍,我们可以很清晰的认识到ZF项目的一切路由请求都交由index.php这个引导文件来处理,那么在这个文件中到底有哪些内容,需要我们做些什么?请先预读代码:

01. defined('APPLICATION_PATH')
02. || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/application'));
03.   
04. defined('FRONTEND_PATH')
05. || define('FRONTEND_PATH', APPLICATION_PATH . '/modules/frontend');
06.   
07. defined('BACKEND_PATH')
08. || define('BACKEND_PATH', APPLICATION_PATH . '/modules/backend');
09.   
10. defined('APPLICATION_ENV')
11. || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
12.   
13. set_include_path(implode(PATH_SEPARATOR, array(
14.     realpath(APPLICATION_PATH . '/../library'),
15.     realpath(APPLICATION_PATH . '/modules/frontend/controllers'),
16.     realpath(APPLICATION_PATH . '/modules/frontend/models'),
17.     realpath(APPLICATION_PATH . '/modules/backend/controllers'),
18.     realpath(APPLICATION_PATH . '/modules/backend/models'),
19.     get_include_path(),
20. )));
21.   
22. require_once 'Zend/Loader/Autoloader.php';
23. Zend_Loader_Autoloader::getInstance()->setFallbackAutoloader(true);
24.   
25. $application = new Zend_Application(
26.     APPLICATION_ENV,
27.     APPLICATION_PATH . '/configs/application.ini'
28. );
29.   
30. try{
31.     $application->getBootstrap()->bootstrap('frontController');  //此处只加载frontController资源
32.     $application->getBootstrap()->bootstrap('router');  //此处加载router资源,该资源在application.ini中配置
33.     $application->run();
34. } catch (Exception $e) {
35.     echo "捕获异常: " . get_class($e) . "
36. ";
37.     echo "异常信息: " . $e->getMessage() . "
38. ";
39. }

代码的开头,检测并定义了项目的三个路径:APPLICATION_PATH这个常量很关键,因为之后的所有常量都是相对于它来定义的,所以它对于整个项目的结构有决定性的作用。接下来,定义的APPLICATION_ENV,是项目的环境常量,它的值会影响到整个项目的环境配置加载,通常我们会在根目录下的.htaccess文件中首先定义一个环境参数SetEnv APPLICATION_ENV development,将项目环境设置为开发,如果需要发布至生产环境,我们可以将development替换为production。关于配置文件的内容,将会在后文中详细介绍,在此暂且不提。

随后是加载项目所需包含的路径,这样以便于“类中找类”,同时也会将php.ini中的include_path变量中的内容引用进来,因此和前文中将ZF框架的路径配置于include_path相契合。

Tips:请仔细关注以下代码,ZF1.8之后两个很重要的变化。还有人记得,当年开启类自动加载时叱咤风云的那句代码吗?是的,Zend_Loader::registerAutoload(); 这句话从1.8开始已经被摒弃,并且在ZF2.0中彻底废弃。因此当你在ZF1.8中试图用此方法实现类自动加载功能时,会看到一句提示,大意是某些方法和1.8版本不兼容。其二是Zend_Application类的使用,引入了“项目资源”的概念,改变了1.8之前通过Zend_Config将配置全部加载的情况。

1. Zend_Loader_Autoloader::getInstance()->setFallbackAutoloader(true);
2.   
3. $application = new Zend_Application(
4.     APPLICATION_ENV,
5.     APPLICATION_PATH . '/configs/application.ini'
6. );
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值