在这里你可以找到关于 Zend_Application 全部核心组件的 API 文档说明。
Zend_Application
Zend_Application 为组件提供了基本的功能,和进入你的应用程序的入口点。它的功能有两部分:建立 PHP 环境(包括自动加载),同时执行你的应用程序的 bootstrap。
典型的,你将传递所有的配置给 Zend_Application 的构造函数,但你也可以使用它的方法来完全配置对象。下面的指导说明展示这两种用法。
Zend_Application 选项 | ||
选项 | 描述 | |
phpSettings | 将要使用到的 php.ini 设置数组。键名应该是 php.ini 键 | |
includePaths | 额外的路径,用来预装在 indclude_path 前面。应该是一个路径数组。 | |
autoloaderNamespaces | 额外的命名空间数组,用来注册到 Zend_Loader_Autoloader 实例。 | |
bootstrap | 关于应用程序引导类的到 bootstrap 类的路径字符串,或者一个带有 path 和 class 元素的数组 | |
|
注意:选项名字
请注意选项名字不区分大小写。
Zend_Application 方法 | ||||||
方法 | 返回值 | 参数 | 描述 | |||
__construct($environment, $options = null) | Void |
| 构造函数:参数正如描述的,将被用来设置对象的初始状态。在实例化过程中,一个 Zend_Loader_Autoloader 实例被注册了。传递给构造函数的选项值会传递给 setOptions()。 | |||
getEnvironment() | 字符串 | N/A | 检索传递给构造函数的环境字符串 | |||
getAutoloader() | Zend_Loader_Autoloader | N/A | 检索在实例化过程中注册的 Zend_Loader_Autoloader 实例。 | |||
setOptions(array $options) | Zend_Application |
| 全部的选项将会保存在内部,多次调用方法,将会合并选项。和大量 setter 方法匹配的选项将会传递给这些方法。例如,phpSettings 选项将会传递给 setPhpSettings() 方法。(选项名字不区分大小写) | |||
getOptions() | 数组 | N/A | 检索全部用于初始化对象的选项;可以在请求之间用来把 Zend_Config 选项缓存到一个序列化格式 | |||
hasOption($key) | 布尔值 |
| 确定一个带有指定键名的选项是否已经被注册。键名不区分大小写。 | |||
getOption($key) | 混合 |
| 检索一个给定键名的选项值。如果键名不存在,返回 NULL。 | |||
setPhpSettings(array $settings, $prefix = '') | Zend_Application |
| 设置运行时的 php.ini 配置。以点分离的设置可能按照等级组织(这可能和 INI Zend_Config 一起发生)通过一个数组的数组,而且依然能被正确解析。 | |||
setAutoloaderNamespaces(array $namespaces) | Zend_Application |
| 使用 Zend_Loader_Autoloader 实例注册的命名空间。 | |||
setBootstrap($path, $class = null) | Zend_Application |
| ||||
getBootstrap() | NULL | Zend_Application_Bootstrap_Bootstrapper | N/A | 检索已经注册的 bootstrap 实例 | |||
bootstrap() | Void | N/A | 调用 bootstrap 的 bootstrap() 方法来引导应用程序 | |||
run() | Void | N/A | 调用 bootstrap 的 run 方法来分发应用程序。 | |||
|
Zend_Application_Bootstrap_Bootstrapper
Zend_Application_Bootstrap_Bootstrapper 是所有的引导类必须应用的基本接口。它的基本功能以配置为目标,鉴别资源,引导(既可以是单独的资源也可以是整个应用程序),然后分发应用程序。
以下的方法建立起了这个接口的定义。
Zend_Application_Bootstrap_Bootstrapper 接口 | ||||||
方法 | 返回值 | 参数 | 描述 | |||
__construct($application) | Void |
| 构造函数。接受一个单独的参数,这个参数应该是一个 Zend_Application 对象,或者另外一个 bootstrap 对象。 | |||
SetOptions(array $options) | Zend_Application_Bootstrap_Bootstrapper |
| 典型的,任何一个和 setter 匹配的选项将会唤起那个 setter;否则,选项将只会简单被保存,以便稍后的检索。 | |||
getApplication() | Zend_Application | Zend_Application_Bootstrap_Bootstrapper | N/A | 检索通过构造函数传递的应用程序或者 bootstrap 对象。 | |||
getApplication() | 字符串 | N/A | 检索父级应用程序或者引导对象中注册的环境字符串。 | |||
getClassResources() | 数组 | N/A | 检索在类中已经定义好的可用资源初始器的名字清单。这个可能与实现相关。 | |||
bootstrap($resource = null) | 混合 |
| 如果 $resource 是空的话,将执行所有的 bootstrap 资源。如果是一个字符串,执行那个单独的资源;如果是一个数组,执行数组中的每一个资源。 | |||
run() | Void | N/A | 定义引导之后,需要运行的应用程序逻辑。 | |||
|
Zend_Application_Bootstrap_ResourceBootstrapper
Zend_Application_Bootstrap_ResourceBootstrapper 是加载外部资源的引导类将要应用的一个接口 ―― 例如,一个或者多个不会在类里面直接定义的资源,而是通过插件定义。它应该和 Zend_Application_Bootstrap_Bootstrapper 结合使用;Zend_Application_Bootstrap_BootstrapAbstract 应用了这个接口。
以下方法组成了这个接口的定义。
Zend_Application_Bootstrap_ResourceBootstrapper | |||
方法 | 返回值 | 参数 | 描述 |
registerPluginResource($resource, $options = null) | Zend_Application_Bootstrap_ResourceBootstrapper |
| 注册一个资源到类,提供可选的配置传递给这个资源 |
unregisterPluginResource($resource) | Zend_Application_Bootstrap_ResourceBootstrapper |
| 从类中移除一个插件资源 |
hasPluginResource($resource) | Boolean |
| 确定一个指定的资源是否已经注册到类中 |
getPluginResource($resource) | Zend_Application_Resource_Resource |
| 通过名字检索一个资源插件实例 |
getPluginResourceNames() | Array | N/A | 检索已经注册的全部插件资源名字的清单 |
setPluginLoader(Zend_Loader_PluginLoader_Interface $loader) | Zend_Application_Bootstrap_ResourceBootstrapper |
| 注册一个插件加载器实例,当解析插件类和名字的时候,将会使用它 |
getPluginLoader() | Zend_Loader_PluginLoader_Interface | N/A | 检索已经注册的插件加载器 |
|
Zend_Application_Bootstrap_BootstrapAbstract
Zend_Application_Bootstrap_BootstrapAbstract 是一个抽象类,它为一个普通的引导类提供了基本的功能。它同时应用了 Zend_Application_Bootstrap_Bootstrapper 和 Zend_Application_Bootstrap_ResourceBootstrapper 这两个接口。
Zend_Application_Bootstrap_BootstrapAbstract 方法 | |||
方法 | 返回值 | 参数 | 描述 |
---|---|---|---|
__construct($application) | Void |
| 构造函数。接受一个单独的参数,它应该是一个 Zend_Application 对象,或者另外一个引导对象。 |
setOptions(array $options) | Zend_Application_Bootstrap_Bootstrapper |
| 任何一个有匹配 setter 的选项,将会唤起那个 setter;否则,选项会被简单保存,以便将来检索。例如,如果你继承类,定义一个 setFoo() 方法,选项 foo 将会把值传递给那个方法。 另外两件事情,也可以使用特殊选项键。pluginPaths 可以用来指定插件资源的路径前缀;它应该是一个数组,类前缀到文件路径的数组。resources 可以用来指定将要使用的插件资源,它应该是:插件资源到实例选项的关联数组。 |
getOptions() | Array | N/A | 返回通过 setOptions() 注册的全部选项 |
hasOption($key) | Boolean |
| 确定一个选项键是否存在 |
getOption($key) | Mixed |
| 检索和一个选项键相关联的值,如果该键没有注册选项则返回 NULL |
setApplication(Zend_Application | Zend_Application_Bootstrap_Bootstrapper $application) | Zend_Application_Bootstrap_BootstrapAbstract |
| 注册父级应用程序或者引导对象 |
getApplication() | Zend_Application | Zend_Application_Bootstrap_Bootstrapper | N/A | 检索通过构造函数传递的应用程序或者引导对象 |
getEnvironment() | String | N/A | 检索和父级应用程序或者引导对象一起注册的环境字符串 |
getClassResources() | Array | N/A | 检索可用的在类中定义的资源初始器名字清单。这可能是与接口相关。 |
getContainer() | Object | N/A | 检索储存资源的容器。如果现在没有注册容器,它将在运行之前注册一个 Zend_Registry 实例 |
setContainer($container) | Zend_Application_Bootstrap_BootstrapAbstract |
| 提供一个容器,用来储存资源。当一个资源方法或者插件返回一个值,它将被储存在这个容器中,以便将来检索 |
hasResource($name) | Boolean |
| 当一个资源方法或者插件返回一个值,它将被储存在资源容器(查看 getContainer() 和 setContainer() )。这个方法将会指示那个资源是否被设置一个值 |
getResource($name) | Mixed |
| 当一个资源方法或者插件返回一个值,它将被保存在资源容器中(查看 getContainer() 和 setContainer() )这个方法将从容器中检索一个资源 |
bootstrap($resource = null) | Mixed |
| 如果 $resource 是空的,执行全部的引导资源。如果是一个字符串,单独执行这个资源;如果是一个数组,执行数组中的每一个资源 这个方法可以用来运行在引导类中定义的资源方法或者通过资源插件类注册的资源。如果资源方法和资源插件有命名冲突,将优先执行在类中定义的资源方法 |
run() | Void | N/A | 定义启动以后将要运行的应用程序逻辑 |
__call($method, $args) | Mixed |
| 提供了这样一种机制:允许你调用 bootstrap<ResourceName>() 而不是使用 bootstrap() 方法来引导单独的资源 |
|
Zend_Application_Bootstrap_Bootstrap
Zend_Application_Bootstrap_Bootstrap 是一个应用了 Zend_Application_Bootstrap_BootstapAbstract 的类。它的主要特点是它注册了前端控制器资源,同时 run() 方法首先检查一个默认的模块已经被定义,然后分发这个前端控制器。
在多数个案中,你会希望继承这个类,出于你的引导需求考虑,或者简单的使用这个类,提供一个将要利用的资源插件清单。
开启应用程序自动加载
另外,这个引导接口提供了指定 namespace 或者资源位于它的树类前缀,将会开启大量应用程序资源的自动加载;实际上,它实例化了一个 Zend_Application_Module_Autoloader 对象,提供了被要求的命名空间和引导类的目录作为参数。你可以开启这个功能,通过提供一个命名空间到 appnamespace 配置选项。以下是一个 INI 例子:
appnamespace = "Application"
或者是 XML:
Application
默认的,Zend_Tool 会开启这个选项,使用 Application 这个值。
另外,你可以简单的定义你的引导类的 $_appNamespace 属性:
Zend_Application_Resource_Resource
Zend_Application_Resource_Resource 是一个接口类,用于插件资源使用 bootstrap 类,这个 bootstrap 类应用了 Zend_Application_ResourceBootstrapper 接口。资源插件被期待允许配置,引导,应用一个策略模式来初始化资源。
Zend_Application_Resource_Resource Interface | |||
方法 | 返回值 | 参数 | 描述 |
__construct($options = null) | Void |
| 构造函数应该允许传递用于初始化状态设置的选项 |
setBootstrap(Zend_Application_Bootstrap_Bootstrapper $bootstrap) | Zend_Application_Resource_Resource |
| 应该允许注册父级引导程序对象 |
getBootstrap() | Zend_Application_Bootstrap_Bootstrapper | N/A | 检索已经注册的引导程序实例 |
setOptions(array $options) | Zend_Application_Resource_Resource |
| 设置资源状态 |
getOptions() | Array | N/A | 检索已经注册的选项 |
init() | Mixed | N/A | 策略模式:运行资源的初始化 |
|
Zend_Application_Resource_ResourceAbstract
Zend_Application_Resource_ResourceAbstract 是一个应用了 Zend_Application_Resource_Resource 接口的抽象类,它是创建你自己定制插件资源的一个好的开始点。
注意:这个抽象类没有应用 init() 方法;这将交由这个类的子类来定义。
Zend_Application_Resource_ResourceAbstract 方法 | |||
方法 | 返回值 | 参数 | 描述 |
__construct($options = null) | Void |
| 构造函数应该允许传递用于状态初始化的选项 |
setBootstrap(Zend_Application_Bootstrap_Bootstrapper $bootstrap) | Zend_Application_Resource_ResourceAbstract |
| 应该允许注册父级引导程序对象 |
getBootstrap() | Zend_Application_Bootstrap_Bootstrapper | N/A | 检索已经注册的引导程序实例 |
setOptions(array $options) | Zend_Application_Resource_ResourceAbstract |
| 设置资源状态 |
getOptions() | Array | N/A | 检索已经注册的选项 |
|
资源名字
当注册资源插件的时候,随之而来的一个问题是你如何从父级引导类引用这些资源。有三种不同的机制可以使用,这将取决你如何配置你的引导程序以及它的插件资源。
首先,如果你的插件被定义在一个已经定义好的前缀路径,你可以通过它们的“短名”来引用它们 —— 也就是说,在类名前缀后面的部分。举例说明,Zend_Application_Resource_View 这个类可以被简单的用 View 来引用,因为 Zend_Application_Resource 这个前缀路径已经被注册了。你可以使用类的全名或者短名来引用它们:
在每一个例子中,你可以然后引导这个资源,然后使用以下短名来检索它:
其次,如果没有匹配的插件路径被定义,你仍然可以把类的全名传递这个资源。在这种情况下,你可以使用资源的类全名来引用它:
显然,这会使得引用资源变得很累赘
这时候第三种选择出现了。你可以指定一个精确的名字,指定的资源类将会以这个名字注册。这可以通过增加一个公共 $_explicitType 属性给资源插件类,通过一个字符串值,这个值将使用,无论何时,你想通过引导程序引用这个插件资源。举例说明,让我们定义我们自己的视图类:
我们然后可以引导这个资源或者通过 My_View 这个名字检索它:
使用这些命名手段,你可以重写现存的资源,添加你自己的,混合多种资源来达到复杂的初始化,以及做更多事情。