根据上回的项目结构介绍,我们可以很清晰的认识到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.
);
本文详细解析了ZF项目中index.php文件的关键作用及其内部逻辑,包括路径定义、环境配置、类自动加载及应用初始化等核心内容。

6282

被折叠的 条评论
为什么被折叠?



