使用Zend Framework进行开发有两种模式。一种将其简单的作为一个个相互独立的组件进行利用(基于其低耦合度),别一种则将其视为框架,进行系统开发。
如果选择第二种,则最好使用Zend_Application简化并开始我们的程序。Zend_Application的官方解释是“提供了一个可重用资源的引导,通用和模块化的引导类和依赖检查。 同时默认负责设置 PHP 环境变量和自动加载功能。”。
从官方的解释可以看出,Zend_Application的主要作用是配置应用程序,当最终调用Zend_Application::run()(内部调用Zend_Controller_Front::dispatch())后,Zend_Application好像突然消失了,一切都回归到你自己写程序时在调用Zend_Controller_Front::dispatch()后要做的事。
既然Zend_Application的主要作用是配置,我们可能提出以下几个问题:
1.我们可以在哪几个地方进行的配置?
2.我们可以设置哪些内容?
3.如何进行具体的设置,以符合我们个性化的需要?
下面我一一解答这几个问题,最后说一说Zend_Application的调用堆栈。
1.我们可以在哪几个地方进行的配置?
我们大概可以从三个地方进行配置index.php,Bootstrap.php,application.ini。
2.我们可以设置哪些内容?
a.index.php中可以设置的内容:
b.Bootstrap.php中,程序会自动调用类似_initYourMethod的方法,用以定制或初始化你的程序。
c.application.ini中的配置相对复杂,大概有四类配置参数:
第一类:位于library/Zend/Application.php:
比如在application.ini中输入:phpSettings.display_errors = 0,则在setOptions中会进入
if (!empty($options['phpsettings'])) {
$this->setPhpSettings($options['phpsettings']);
}并进行相应处理。
第二类:用于配置resource组件的参数(如Zend_Application_Resource_Frontcontroller,所有可用的resource可以在library/Zend/Application/Resource目录下找到。)如在application.ini中输入resources.FrontController.moduledirectory = APPLICATION_PATH "/modules",则会在Zend_Application_Resource_Frontcontroller内部调用Zend_Controller_Front::addModuleDirectory。Zend_Application_Resource_Frontcontroller的另外可选参数参见以下代码。其它resource组件的配置类推。
第三类:通过resource组件间接配置相应组件。如用Zend_Application_Resource_View配置Zend_View。原因是在Zend_Application_Resource_View中实例化Zend_View时,Zend_Application_Resource_View会将从application.ini中传来的有关视图的参数传递给Zend_View的构造函数,从而间接的配置了Zend_View。如resources.view.scriptPath = APPLICATION_PATH "/views/bbs/scripts"最终调用的是Zend_View的addScriptPath。
第四类:所有在Zend_Application_Bootstrap_Bootstrap,Zend_Application_Bootstrap_BootstrapAbstract,Zend_Application_Bootstrap_Bootstrapper,Zend_Application_Bootstrap_ResourceBootstrapper中以set开头的方法。如要设置appnamespace则可在application.ini中输入:“appnamespace = "Application"”,依据是28-32行。
3.如何进行具体的设置,以符合我们个性化的需要?
a.index.php:在文件开头加入“define('APPLICATION_ENV', 'development');”以进入调试模式;
b.以下给出application.ini配置的几个例子,主要是教你怎么在application.ini写配置(因为我不知道你的具体要求):
例一:如何配置mysql数据库?
答:在application.ini中加入如下内容:
resources.db.adapter = PDO_MYSQL
resources.db.params.host = localhost
resources.db.params.username = root
resources.db.params.password = 123456
resources.db.params.dbname = dbname
例2:如何建立如下目录结构?
/application
/modules
/bbs
/blog
/controllers
/IndexController.php
/ErrorController.php
/models
/DbTable
/Article.php
/templates
/bbs
/blog
/filters
/helpers
/scripts
/index
/index.phtml
/library
/Zend
/public
/index.php
答:在application.ini中加入如下内容(这里只说明如何设置modules目录和templates目录):
a.设置modules目录
resources.FrontController.moduledirectory = APPLICATION_PATH "/modules"(内部调用Zend_Controller_Front::addModuleDirectory)
resources.FrontController.defaultModule = "blog"
b.设置templates目录
resources.view.basePath = APPLICATION_PATH "/views"
resources.view.scriptPath = APPLICATION_PATH "/views/bbs/scripts"(内部调用Zend_View::addScriptPath)
resources.view.scriptPath = APPLICATION_PATH "/views/blog/scripts"
关于resource组件的配置需要专门一篇文章详细说明:Zend_Application - 第二部分 - resource组件的使用与配置
另外,想知道Zend_Application的运行流程请进入:Zend_Application - 第三部分 - Zend_Application的调用堆栈