4

我正在阅读 Zend Framework 手册,无法理解引导程序是如何工作的,特别是在 ZF 和一般情况下。他们写:

您的 Bootstrap 类定义了要初始化的资源和组件。

行。这意味着首先应该实例化 Bootstrap 类。但是后来他们写了配置ini文件。里面有关于Bootstrap类本身的指令:

1.  bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
2.  bootstrap.class = "Bootstrap"

所以据我了解,这意味着Bootstarp首先实例化的不是类。首先必须读取配置文件,获取有关Bootstrap类的信息并让该信息实例化。否则就不需要Bootstrap在配置文件中有关于类的信息。因为我可以这样做:

require_once(/application/bootstrap.php) 
$b = new Bootstrap();

并且 Bootstrap 被实例化。

但是他们对读取配置文件然后创建Bootstrap.

  1. Bootstrap 是如何工作的?
  2. 谁在哪个阶段实例化它?
  3. 他们说APPLICATION_PATH是一个常数。必须先在某个地方定义一个常量,然后才能使用它。如果在 Bootstrap 类中使用,可以在哪里定义?

谢谢你。

4

2 回答 2

6

如果您查看index.phpZF 附带的文件,这应该可以回答大部分问题。

常量在APPLICATION_PATH中定义index.php,这也是Zend_Application创建对象的地方,它简单地引导应用程序,然后运行它。

有两种方法可以告诉Zend_Application您引导程序在 ZF1 中的位置。

第一种方式(明确设置):

$application = new Zend_Application(
    APPLICATION_ENV,
    array(
        'bootstrap' => array(
            'class' => 'Bootstrap',
            'path' => APPLICATION_PATH . '/Bootstrap.php',
        ),
        'config' => APPLICATION_PATH . '/configs/application.ini',
    )
);

在上面的示例中,引导类和引导脚本与文件一起作为$options直接 toZend_Application的构造函数的一部分传递application.ini

如果将引导类和脚本放在application.ini文件中,则可以Zend_Application像这样初始化:

$application = new Zend_Application(
    APPLICATION_ENV,
    array('config' => APPLICATION_PATH . '/configs/application.ini')
);

Zend_Application将处理application.ini文件并从那里收集引导信息。

然后,您可以调用$application->bootstrap()->run();以运行该应用程序。

直接回答您的问题:

  1. 引导程序设置您的应用程序。处理完您的ini文件后,第一件事就是发生。这将为您的 ZF 应用程序设置所有必需的组件(例如 Front Controller、Zend_View、Layouts、DB 连接等)。
  2. index.php 一开始就将其实例化。
  3. APPLICATION_PATH在 index.php 中立即定义
于 2012-06-12T18:48:57.417 回答
2

这是我的简短解释:

Bootstrap初始化框架资源、初始化框架配置、加载类等框架准备工作,在每次请求时启动,默认配置下由index.php文件启动。

  1. 首先在定义常量的index.php地方调用APPLICATION_PATH并传递给Application类构造函数。
  2. 在构造函数框架中创建的应用程序类实例读取配置文件并存储以备后用。
  3. 然后框架引导开始:

    I. 创建了应用程序/引导类实例(框架开始创建所需的插件,在您的 *.ini 文件中定义的资源。)

    二、获取您的自定义引导类并使用init前缀初始化方法。

    三、加载 FrontController 资源,前端控制器启动请求调度过程(加载模块、控制器、视图、调用插件回调)。

总体而言,您可以自己跟踪所有内容,从index.php文件开始,然后到库,并尝试了解以什么顺序加载了哪些类。

于 2012-06-12T18:46:54.647 回答