注:适合ZF1.10
Zend_Application把应用程序进行抽象包装。其功能职责是加载应用程序配置,并对应用程序进行引导。
Zend/Application包类图大概如下:
如何使用Zend_Application类。
新建一个Zend_Application对象
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH.'/configs/application.ini'
)
Zend_Application类的构造函数中包含了两个参数。一个是环境定义,另一个是配置项。
环境定义是你自己定义的一个字符串。配置项可以是一个数据。一个Zend_Config实例,或者是一个文件名的字符串(Ini文件,inc文件,php文件或者Xml文件)
构造函数中定义了Zend_Application对象的环境,初始化Zend_Loader_Autoloader的单例,并根据传入的配置,加载配置信息。
新建完Zend_Application对象后,便可对它进行引导了。
$application->bootstrap();
Zend_Application 实际上是把引导方法转发给 Zend_Application_Bootstrap_BootstrapAbstract
Zend_Application 与Zend_Application_Bootstrap_BootstrapAbstract 类是聚合关系。什么是聚合关系呢?
?(此处省略一千字,详细见http://ir.hit.edu.cn/~car/programming/rup/process/modguide/md_aggrg.htm)
总而言之,也就是说Zend_Application中包含了一个Zend_Application_Bootstrap_BootstrapAbstract(或者说是一个Zend_Application_Bootstrap_BootstrapAbstract的引用 )事实上,Zend_Application_Bootstrap_BootstrapAbstract中也包含了一个Zend_Application的引用 。他们就是通过这个引用进行相互通信的。
当调用Zend_Application的bootstrap()方法时, Zend_Application会先实例化一个Zend_Application_Bootstrap_BootstrapAbstract的子类对象(默认是Zend_Application_Bootstrap_Bootstrap) 。
Zend_Application_Bootstrap_Bootstrap在初始化时,会先取得 Zend_Application中的配置信息。并根据配置信息,初始化相应的引导资源类。
Zend/Application/Resource包中包含了一系列的引导资源。每个引导资源类负责对应用的某个资源的初始化。如Zend_Application_Resource_Db负责初始化应用程序的数据库类,而Zend_Application_Resource_Log则负责初始化应用程序的日志类。引导资源类实现了Zend_Application_Resource_Resource接口,继承自Zend_Application_Resource_ResourceAbstract。
Zend_Application把bootstrap()方法转发给Zend_Application_Bootstrap_Bootstrap ,在Zend_Application_Bootstrap_Bootstrap的bootstrap()中,遍历注册了的引导资源的并调用引导的init()方法。
如果要写一个简化版,大概就是这样:
//应用程序类
class App
{
protected $_bootstrap;
public function bootstrap()
{
$this->_bootstrap = new BootStrap($this);
$this->_bootstrap->bootstrap();
}
}
//引导类
class BootStrap
{
protected $_app;
protected $_resources;
public function __construct($app)
{
$this->_app = $app;
$this->_createResources($app->getOptions());
}
protected function _createResources($option)
{
//根据配置注册相应的引导资源类并array_push至$this->_resources数组中
}
public function bootstrap()
{
foreach($this->_resources as $resource){
$resource->init();
}
}
}
//引导资源抽象类
class ResourceAbstract
{
public function init()
{
//do some thing
}
}
因为Zend_Application_Bootstrap_Bootstrap类可以根据配置项生成不同的引导资源类,所以,我们就不用去写太多的代码了。只要写好一个配置文件就OK,例如我们要数据库类:在config.ini中可以这样写
[yourenvironment]
resources.db.adapter = PDO_MYSQL
resources.db.params.host = localhost
resources.db.params.username = root
resources.db.params.password = password
resources.db.params.dbname = testUser
这样Zend_Application_Bootstrap_Bootstrap就会在程序引导时,自动初始化数据库类。
关于配置文件如何写?
请其它大侠有时间写。
引导完应用程序类,然后可以运行
当然,可以用连缀语法,引导和运行一起
$application->bootstrap()->run();
Zend_Application类其实也是把run()请求转发给Zend_Application_Resource_ResourceAbstract类,也就是调用Zend_Application_Resource_ResourceAbstract的run()方法。
可别以为Zend_Application就是个懒汉了,每个类都有其自身的使命所在(单一职责原则),过于热心什么都做只会使类变得过于宠大和把管理弄得一团糟。例如你到银行,保安负责把关,柜台人员负责存取款,贷款找业务人员,不同的人负责不同的事,不可能同一个人负责所有的事(如果一个人会所有事情,那他得学多少呀。如果是一个类,那得多么庞大呀。。)。如果你对保安说你要存款,保安会把你的请求转发给柜台人员,由柜台人员执行存款的请求(职责链模式)。
- 大小: 184.4 KB
分享到:
相关推荐
不支持PDO 、MYSQLI的空间也可以用ZEND框架了 解包后到 Zend 的框架目录 library\Zend\Db 在PHP程序里 $db = Zend_Db::factory('Mysql', $params); 即把原来的 PDO_MYSQL 等改成 Mysql
•Zend_Application •Zend_Auth •Zend_Barcode •Zend_Cache •Zend_Captcha •SimpleCloud API: Zend_Cloud •Zend_CodeGenerator •Zend_Config •Zend_Config_Writer •Zend_Console_Getopt •Zend_...
在本文中,我们将深入探讨 Zend Framework 中的 Zend_Application,这是一个至关重要的组件,它为框架应用程序提供了基础结构和启动流程。Zend_Application 作为程序的入口点,主要负责两件关键的事情:初始化PHP...
`library`目录可能包含了`Zend_Acl`的相关类,`bin`和`public`目录可能分别包含命令行工具和前端资源,而`application`目录则包含了应用程序的逻辑,如控制器和模型,它们可能与`Zend_Acl`的使用有关。 总之,`Zend...
在这个项目中,加入了layout功能,具体操作是在应用配置文件中,即layout_demo2/application/configs/application.ini中加入必要的配置指令来指定控制器目录、关闭异常显示以及指定布局文件路径。 布局文件通常位于...
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initView() { $view = new Zend_View(); $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('...
Zend_Config 提供了灵活的方式来管理应用程序配置,而 Zend_Application 和 Zend_Injector 实现了依赖注入,允许动态组装对象并注入依赖,提升代码的可测试性和可维护性。 通过深入学习 Zend Framework 的中英文...
本文实例讲述了Zend Framework教程之Application和Bootstrap用法。分享给大家供大家参考,具体如下: 在一个MVC应用程序中,我们需要初始化建立数据库链接,配置视图和视图助手,配置布局,注册相关插件,注册action...
`APPLICATION_PATH`设置为相对于入口文件的`application`目录的绝对路径,而`APPLICATION_ENV`则根据环境变量或默认值确定当前的运行环境(如开发、生产等)。 #### B. 配置环境目录 `set_include_path`函数用于...
本文实例讲述了Zend Framework中Resource Autoloading用法。分享给大家供大家参考,具体如下: 通常,在开发应用程序中,可能类文件名不能...$loader = new Zend_Application_Module_Autoloader(array( 'namespace'
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { } ``` ### 4. 配置(Configuration) 尽管Zend Framework本身不需要配置,但通常需要为应用程序设置配置。默认的配置文件是`application/configs...
defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); ``` 通过上述步骤,我们可以成功地安装和配置Zend Framework框架,为后续的Web应用开发打下坚实的...
Zend Framework 2 Application Development is a hands-on guide to building your application. We will explore the components of this new version of the framework and discover how to use each component, ...