Zend 框架之 Zend_Application 之(一):Zend_Application 快速入门

有2种方法来开始 Zend_Application,这将取决你如何开始你的项目。无论是哪种方法,你总是以创建一个 Bootstrap 类,和一个相关的配置文件来开始的。

如果你计划使用 Zend_Tool 来创建你的项目,继续阅读。如果你想在一个已有项目中添加 Zend_Application,你可能需要跳把 Zend_Application 加入到你的项目 部分。

使用 Zend_Tool

开始使用 Zend_Application 的最快方式是使用 Zend_Tool 来生成你的项目。这将同时创建你的 Bootstrap 类和文件。

为了创建一个项目,执行以下 zf 命令(在 *nix 系统上):

% zf create project newproject

或者 Windows 上的 zf.bat 命令:

C:> zf.bat create project newproject

两者将会创建一下结构如下的项目:

        
      newproject
      |-- application
      |   |-- Bootstrap.php
      |   |-- configs
      |   |   `-- application.ini
      |   |-- controllers
      |   |   |-- ErrorController.php
      |   |   `-- IndexController.php
      |   |-- models
      |   `-- views
      |       |-- helpers
      |       `-- scripts
      |           |-- error
      |           |   `-- error.phtml
      |           `-- index
      |               `-- index.phtml
      |-- library
      |-- public
      |   `-- index.php
      `-- tests
          |-- application
          |   `-- bootstrap.php
          |-- library
          |   `-- bootstrap.php
          `-- phpunit.xml
	

在上面的结构中,你的 bootstrap 位于 newproject/application/Bootstrap.php,最初看起来像这样:

clss Bootstrap extends Zend_Application_Bootstrap_Bootstrap { }

你会同时注意到一个配置文件,newproject/application/configs/application.ini,被创建了。它有以下的内容:

     
      [production]
      phpSettings.display_startup_errors = 0
      phpSettings.display_errors = 0
      includePaths.library = APPLICATION_PATH "/../library"
      bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
      bootstrap.class = "Bootstrap"
      resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
       
      [staging : production]
       
      [testing : production]
      phpSettings.display_startup_errors = 1
      phpSettings.display_errors = 1
       
      [development : production]
      phpSettings.display_startup_errors = 1
      phpSettings.display_errors = 1
	

这个配置文件内的所有配置,将被 Zend_Application 和你的 bootstrap 使用。

另外一个有趣的文件是 newproject/public/index.php,它将唤起 Zend_Application 和分发它(Zend_Application)。

// Define path to application directory defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); // Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); /** Zend_Application */ require_once 'Zend/Application.php'; // Create application, bootstrap, and run $application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); $application->bootstrap() ->run();

为了继续快速开始,请跳到添加和创建资源 部分。

把 Zend_Application 加入到你的项目

Zend_Application 的基本面是十分简单的:

  • 创建一个 application/Bootstrap.php 文件,内容包括 Bootstrap 类
  • 创建一个 application/configs/application.ini 配置文件,内容是关于 Zend_Application 所必需的基本配置
  • 修改你的 public/index.php 来调用 Zend_Application

首先,创建你的 Bootstrap 类。创建一个文件,application/Bootstrap.php,带有以下内容:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { }

现在,创建你的配置文件。具体到本教程,我们会使用一个 INI 风格的配置;你可以,当然,使用一个 XML 或者 PHP 风格的配置文件。创建 application/configs/application.ini 文件,文件内容如下:

      
      [production]
      phpSettings.display_startup_errors = 0
      phpSettings.display_errors = 0
      includePaths.library = APPLICATION_PATH "/../library"
      bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
      bootstrap.class = "Bootstrap"
      resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
       
      [staging : production]
       
      [testing : production]
      phpSettings.display_startup_errors = 1
      phpSettings.display_errors = 1
       
      [development : production]
      phpSettings.display_startup_errors = 1
      phpSettings.display_errors = 1
	

现在,让我们修改你的入口文件,public/index.php。如果文件不存在,创建它;否则,用以下内容代换它:

// Define path to application directory defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); // Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); // Typically, you will also want to add your library/ directory // to the include_path, particularly if it contains your ZF installed set_include_path(implode(PATH_SEPARATOR, array( dirname(dirname(__FILE__)) . '/library', get_include_path(), ))); /** Zend_Application */ require_once 'Zend/Application.php'; // Create application, bootstrap, and run $application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); $application->bootstrap() ->run();

你可能注意到了应用程序的环境常量正在等待一个“APPLICATION_EVN”的环境变量。我们建议在你的 web 服务器环境中设置这个值。在 Apache,你既可以在你的虚拟主机的配置中设置,也可以在你的 .htaccess 文件中设置。对于你的 public/.htaccess 文件,我们建议如下设置:

 
      SetEnv APPLICATION_ENV development
       
      RewriteEngine On
      RewriteCond %{REQUEST_FILENAME} -s [OR]
      RewriteCond %{REQUEST_FILENAME} -l [OR]
      RewriteCond %{REQUEST_FILENAME} -d
      RewriteRule ^.*$ - [NC,L]
      RewriteRule ^.*$ index.php [NC,L]
	

注意:关于 mod_rewrite

上面的重写规则允许访问你的虚拟主机文档根目录中的任何文件。如果有任何你不想通过这种方式被访问的文件,你可能需要在你的重写规则中作出更严格的限制。访问 Apache 网站来学习更多关于 mod_rewrite 的相关知识。

到现在,你已经为开始更深利用 Zend_Application 全部准备好了。

添加和创建资源

如果你按照上述步骤做下来,那么你的 bootstrap 类将利用一个前端控制器(front controller),当它(bootstrap 类)运行的时候,它将分发这个前端控制器。然而,更可能的情况是,你还需要做更进一步的配置。

在这个部分,我们将会探讨为你的应用程序添加两个资源。首先,我们会建立你的模板(layout),然后我们将配置你的视图对象(view object)。

由 Zend_Application 提供的一个标准资源是“模板”(layout)资源。这个资源等待你来定义配置相关的值,然后它将利用这些值来配置你的 Zend_Layout 实例。

为了使用它,我们要做的只是更新配置文件。

      
      [production]
      phpSettings.display_startup_errors = 0
      phpSettings.display_errors = 0
      bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
      bootstrap.class = "Bootstrap"
      resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
      ; ADD THE FOLLOWING LINES
      resources.layout.layout = "layout"
      resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
       
      [staging : production]
       
      [testing : production]
      phpSettings.display_startup_errors = 1
      phpSettings.display_errors = 1
       
      [development : production]
      phpSettings.display_startup_errors = 1
      phpSettings.display_errors = 1
	

如果 application/layouts/scripts/ 这个目录不存在,创建它,然后在这个目录下创建 layout.phtml 文件。一个好的开始模板文件如下(将会和后面提到的视图资源紧密相关):

<?php echo $this->doctype() ?> <html> <head> <?php echo $this->headTitle() ?> <?php echo $this->headLink() ?> <?php echo $this->headStyle() ?> <?php echo $this->headScript() ?> </head> <body> <?php echo $this->layout()->content ?> </body> </html>

到现在为止,你会拥有一个运行正常的模板。

现在,我们将添加一个定制的视图资源。当初始化这个视图的时候,我们想设置 HTML 的 DocType 以及在 HTML 头部使用的一个默认 title 值。这可以通过编辑你的 Bootstrap 类,在这个类中添加一个方法来做到:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initView() { // Initialize view $view = new Zend_View(); $view->doctype('XHTML1_STRICT'); $view->headTitle('My First Zend Framework Application'); // Add it to the ViewRenderer $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper( 'ViewRenderer' ); $viewRenderer->setView($view); // Return it, so that it can be stored by the bootstrap return $view; } }

这个方法将会在你启动应用程序的时候被自动执行,而且确保你的视图根据你的应用程序的需要被初始化。

对 Zend_Application 进一步利用

以上应该会让你开始使用 Zend_Application 并且创建你的应用程序的 bootstrap。从现在开始,你应该开始创建资源的方法,或者,为了重用性的最大化,资源插件类。继续阅读以学习更多。

你可能感兴趣的:(框架,application,Path,include,Zend,testing)