有2种方法来开始 Zend_Application,这将取决你如何开始你的项目。无论是哪种方法,你总是以创建一个 Bootstrap 类,和一个相关的配置文件来开始的。
如果你计划使用 Zend_Tool 来创建你的项目,继续阅读。如果你想在一个已有项目中添加 Zend_Application,你可能需要跳把 Zend_Application 加入到你的项目 部分。
开始使用 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 的基本面是十分简单的:
首先,创建你的 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 并且创建你的应用程序的 bootstrap。从现在开始,你应该开始创建资源的方法,或者,为了重用性的最大化,资源插件类。继续阅读以学习更多。