Zend 框架之 Zend_Application 之(四):核心功能

在这里你可以找到关于 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 
  • $environment:必要参数。表示当前应用程序环境的字符串。典型的字符串可能包括:development,testing,qa,或者 production,但是会根据你的组织要求来定义。
  • $options:可选参数。参数可能是下面中的一个值:
    • 字符串:到 Zend_Config 文件的路径,这个文件被用作你的应用程序配置加载。$environment 会被用来确定配置的哪个部分被会被调用(development 或 production 或是其它)。
      对于1.10版本,你也可以传递包含配置文件的多个路径来合并成一个单独的配置。这将有助于减少许多享有通用配置(例如对 HTTP、或者 CLI 的配置,每个都分享一些特性,但是对于其它的设置,它们有各自不同的值)领域的重复配置,或者把一个长的配置文件分离成许多更小的目录文件。这种情况下的参数是带有一个单独的“configs”键名的数组,其中 configs 的值是将要合并的文件数组。注意:这意味着你既可以传递一个字面上的路径,或者 array("configs"=>array("/path1", "/path2" [,...]));
    • 数组:关于你的应用程序的设置数据的关联数组。
    • Zend_Config:配置对象实例。
 构造函数:参数正如描述的,将被用来设置对象的初始状态。在实例化过程中,一个 Zend_Loader_Autoloader 实例被注册了。传递给构造函数的选项值会传递给 setOptions()。
getEnvironment() 字符串 N/A 检索传递给构造函数的环境字符串
getAutoloader() Zend_Loader_Autoloader N/A 检索在实例化过程中注册的 Zend_Loader_Autoloader 实例。
setOptions(array $options) Zend_Application 
  • $options:必需。一个应用程序的选项数组。
     全部的选项将会保存在内部,多次调用方法,将会合并选项。和大量 setter 方法匹配的选项将会传递给这些方法。例如,phpSettings 选项将会传递给 setPhpSettings() 方法。(选项名字不区分大小写)
    getOptions() 数组 N/A 检索全部用于初始化对象的选项;可以在请求之间用来把 Zend_Config 选项缓存到一个序列化格式
    hasOption($key) 布尔值 
    • $key:将要查找的选项的键名字符串
     确定一个带有指定键名的选项是否已经被注册。键名不区分大小写。
    getOption($key) 混合 
    • $key:将要查找的选项的键名字符串
     检索一个给定键名的选项值。如果键名不存在,返回 NULL。
    setPhpSettings(array $settings, $prefix = '') Zend_Application 
    • $settings:必须。PHP INI 设置的关联数组。
    • $prefix:可选。将要前置在选项键名前面的字符串。用于内部来允许映射成对的数组到用点分离的 php.ini 键名。一般用说,应该永远不要由一个用户传递这个参数。
     设置运行时的 php.ini 配置。以点分离的设置可能按照等级组织(这可能和 INI Zend_Config 一起发生)通过一个数组的数组,而且依然能被正确解析。
    setAutoloaderNamespaces(array $namespaces) Zend_Application 
    • $namespaces:必须。代表用 Zend_Loader_Autoloader 实例注册的命名空间字符串数组。
     使用 Zend_Loader_Autoloader 实例注册的命名空间。
    setBootstrap($path, $class = null) Zend_Application 
    • $path:必须。可以是一个 Zend_Application_Bootstrap_Bootstrapper 实例,一个到 bootstrap 类的路径字符串,一个“类名=>文件名”的关联数组,或者一个带有“class”和“path”键名的关联数组。
    • $class:可选。如果 $path 是一个字符串,$class 可以被指定,而且应该是一个由路径指示的文件中含有的类的类名的字符串。
      
    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 
    • $appliation:必须。应该接受一个 Zend_Application 或者一个 Zend_Application_Bootstrap_Bootstrapper 对象作为唯一的参数。
     构造函数。接受一个单独的参数,这个参数应该是一个 Zend_Application 对象,或者另外一个 bootstrap 对象。
    SetOptions(array $options) Zend_Application_Bootstrap_Bootstrapper 
    • $options:必须。需要设置的选项数组。
     典型的,任何一个和 setter 匹配的选项将会唤起那个 setter;否则,选项将只会简单被保存,以便稍后的检索。
    getApplication()  Zend_Application | Zend_Application_Bootstrap_Bootstrapper N/A 检索通过构造函数传递的应用程序或者 bootstrap 对象。
    getApplication() 字符串 N/A 检索父级应用程序或者引导对象中注册的环境字符串。
    getClassResources() 数组 N/A 检索在类中已经定义好的可用资源初始器的名字清单。这个可能与实现相关。
    bootstrap($resource = null) 混合 
    • $resource:可选。
     如果 $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
    • $resource : 必须 . 一个资源的名字或者 Zend_Application_Resource_Resource 对象

    • $options : 可选 . 一个数组或者 Zend_Config 对象,用来传递给寝化的资源

    注册一个资源到类,提供可选的配置传递给这个资源

    unregisterPluginResource($resource) Zend_Application_Bootstrap_ResourceBootstrapper
    • $resource : 必须 . 从类中取消注册的资源名字

    从类中移除一个插件资源

    hasPluginResource($resource) Boolean
    • $resource : 必须 . 资源的名字

    确定一个指定的资源是否已经注册到类中

    getPluginResource($resource) Zend_Application_Resource_Resource
    • $resource : 必须 . 将要检索的资源名字(字符串)

    通过名字检索一个资源插件实例

    getPluginResourceNames() Array N/A

    检索已经注册的全部插件资源名字的清单

    setPluginLoader(Zend_Loader_PluginLoader_Interface $loader) Zend_Application_Bootstrap_ResourceBootstrapper
    • $loader : 必须 . 当解析插件名字到类,将要使用的插件加载器实例

    注册一个插件加载器实例,当解析插件类和名字的时候,将会使用它

    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
    • $application : 必须 。 接受一个 Zend_Application 或者 Zend_Application_Bootstrap_Bootstrapper 对象作为单独的一个参数

    构造函数。接受一个单独的参数,它应该是一个 Zend_Application 对象,或者另外一个引导对象。

    setOptions(array $options) Zend_Application_Bootstrap_Bootstrapper
    • $options : 必须 。 需要设置的选项数组

    任何一个有匹配 setter 的选项,将会唤起那个 setter;否则,选项会被简单保存,以便将来检索。例如,如果你继承类,定义一个 setFoo() 方法,选项 foo 将会把值传递给那个方法。

    另外两件事情,也可以使用特殊选项键。pluginPaths 可以用来指定插件资源的路径前缀;它应该是一个数组,类前缀到文件路径的数组。resources 可以用来指定将要使用的插件资源,它应该是:插件资源到实例选项的关联数组。

    getOptions() Array N/A

    返回通过 setOptions() 注册的全部选项

    hasOption($key) Boolean
    • $key : 必须 。 需要检测的选项键

    确定一个选项键是否存在

    getOption($key) Mixed
    • $key : 必须 。 需要检索的选项键

    检索和一个选项键相关联的值,如果该键没有注册选项则返回 NULL

    setApplication(Zend_Application | Zend_Application_Bootstrap_Bootstrapper $application) Zend_Application_Bootstrap_BootstrapAbstract
    • $application : 必须

    注册父级应用程序或者引导对象

    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
    • $container , 必须 。 储存资源的一个对象

    提供一个容器,用来储存资源。当一个资源方法或者插件返回一个值,它将被储存在这个容器中,以便将来检索

    hasResource($name) Boolean
    • $name , 必须 。 需要检查的资源名字

    当一个资源方法或者插件返回一个值,它将被储存在资源容器(查看 getContainer()setContainer() )。这个方法将会指示那个资源是否被设置一个值

    getResource($name) Mixed
    • $name , 必须 。 被捕捉的资源名字

    当一个资源方法或者插件返回一个值,它将被保存在资源容器中(查看 getContainer()setContainer() )这个方法将从容器中检索一个资源

    bootstrap($resource = null) Mixed
    • $resource : optional .

    如果 $resource 是空的,执行全部的引导资源。如果是一个字符串,单独执行这个资源;如果是一个数组,执行数组中的每一个资源

    这个方法可以用来运行在引导类中定义的资源方法或者通过资源插件类注册的资源。如果资源方法和资源插件有命名冲突,将优先执行在类中定义的资源方法

    run() Void N/A

    定义启动以后将要运行的应用程序逻辑

    __call($method, $args) Mixed
    • $method : 必须 。 将要调用的方法名字

    • $args : 必须 。 在调用方法过程中使用的参数数组

    提供了这样一种机制:允许你调用 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
    • $options : optional . 用于设置资源状态的选项

    构造函数应该允许传递用于初始化状态设置的选项

    setBootstrap(Zend_Application_Bootstrap_Bootstrapper $bootstrap) Zend_Application_Resource_Resource
    • $bootstrap : required . 初始化这个资源的父级引导程序

    应该允许注册父级引导程序对象

    getBootstrap() Zend_Application_Bootstrap_Bootstrapper N/A

    检索已经注册的引导程序实例

    setOptions(array $options) Zend_Application_Resource_Resource
    • $options : 必须 . 用于设置状态的选项

    设置资源状态

    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
    • $options : 可选 . 用于设置资源状态的选项

    构造函数应该允许传递用于状态初始化的选项

    setBootstrap(Zend_Application_Bootstrap_Bootstrapper $bootstrap) Zend_Application_Resource_ResourceAbstract
    • $bootstrap : 必须 . 初始化这个资源的父级引导程序

    应该允许注册父级引导程序对象

    getBootstrap() Zend_Application_Bootstrap_Bootstrapper N/A

    检索已经注册的引导程序实例

    setOptions(array $options) Zend_Application_Resource_ResourceAbstract
    • $options : 必须 . 用来设置状态的选项

    设置资源状态

    getOptions() Array N/A

    检索已经注册的选项


    资源名字

    当注册资源插件的时候,随之而来的一个问题是你如何从父级引导类引用这些资源。有三种不同的机制可以使用,这将取决你如何配置你的引导程序以及它的插件资源。

    首先,如果你的插件被定义在一个已经定义好的前缀路径,你可以通过它们的“短名”来引用它们 —— 也就是说,在类名前缀后面的部分。举例说明,Zend_Application_Resource_View 这个类可以被简单的用 View 来引用,因为 Zend_Application_Resource 这个前缀路径已经被注册了。你可以使用类的全名或者短名来引用它们:

    在每一个例子中,你可以然后引导这个资源,然后使用以下短名来检索它:

    其次,如果没有匹配的插件路径被定义,你仍然可以把类的全名传递这个资源。在这种情况下,你可以使用资源的类全名来引用它:

    显然,这会使得引用资源变得很累赘

    这时候第三种选择出现了。你可以指定一个精确的名字,指定的资源类将会以这个名字注册。这可以通过增加一个公共 $_explicitType 属性给资源插件类,通过一个字符串值,这个值将使用,无论何时,你想通过引导程序引用这个插件资源。举例说明,让我们定义我们自己的视图类:

    我们然后可以引导这个资源或者通过 My_View 这个名字检索它:

    使用这些命名手段,你可以重写现存的资源,添加你自己的,混合多种资源来达到复杂的初始化,以及做更多事情。

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值