There are two paths to getting started with
Zend_Application
, and they depend on how you start your
project. In each case, you always start with creating a
Bootstrap
class, and a related configuration file.
If you plan on using Zend_Tool
to create your project,
continue reading below. If you will be adding
Zend_Application
to an existing project, you'll want to
skip ahead.
The quickest way to start using Zend_Application
is to use
Zend_Tool
to generate your project. This will also create
your Bootstrap
class and file.
To create a project, execute the zf command (on *nix systems):
% zf create project newproject
Or the Windows zf.bat
command:
C:> zf.bat create project newproject
Both will create a project structure that looks like the following:
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
In the above diagram, your bootstrap is in
newproject/application/Bootstrap.php
, and looks like
the following at first:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { }
You'll also note that a configuration file,
newproject/application/configs/application.ini
, is
created. It has the following contents:
[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
All settings in this configuration file are for use with
Zend_Application
and your bootstrap.
Another file of interest is the
newproject/public/index.php
file, which invokes
Zend_Application
and dispatches it.
// 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();
To continue the quick start, please skip to the Resources section.
The basics of Zend_Application
are fairly simple:
-
Create an
application/Bootstrap.php
file, with the classBootstrap
. -
Create an
application/configs/application.ini
configuration file with the base configuration necessary forZend_Application
. -
Modify your
public/index.php
to utilizeZend_Application
.
First, create your Bootstrap
class. Create a file,
application/Bootstrap.php
, with the following contents:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { }
Now, create your configuration. For this tutorial, we will use an
INI style configuration; you may, of course, use an
XML, JSON, YAML, or
PHP configuration file as well. Create the file
application/configs/application.ini
, and provide the following
contents:
[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
Now, let's modify your gateway script,
public/index.php
. If the file does not exist, create
it; otherwise, replace it with the following contents:
// 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();
You may note that the application environment constant value looks
for an environment variable "APPLICATION_ENV". We recommend setting
this in your web server environment. In Apache, you can set this
either in your vhost definition, or in your .htaccess
file. We recommend the following contents for your
public/.htaccess
file:
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]
Learn about mod_rewrite
The above rewrite rules allow access to any file under your virtual host's document root. If there are files you do not want exposed in this way, you may want to be more restrictive in your rules. Go to the Apache website to learn more about mod_rewrite.
At this point, you're all set to start taking advantage of
Zend_Application
.
If you followed the directions above, then your bootstrap class will be utilizing a front controller, and when it is run, it will dispatch the front controller. However, in all likelihood, you'll need a little more configuration than this.
In this section, we'll look at adding two resources to your application. First, we'll set up your layouts, and then we'll customize your view object.
One of the standard resources provided with
Zend_Application
is the "layout" resource. This
resource expects you to define configuration values which it will
then use to configure your Zend_Layout
instance.
To use it, all we need to do is update the configuration file.
[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
If you haven't already, create the directory
application/layouts/scripts/
, and the file
layout.phtml
within that directory. A good starting
layout is as follows (and ties in with the view resource covered
next):
<?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>
At this point, you will now have a working layout.
Now, we'll add a custom view resource. When initializing the view,
we'll want to set the HTML DocType and a default value for the title
to use in the HTML head. This can be accomplished by editing your
Bootstrap
class to add a method:
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; } }
This method will be automatically executed when you bootstrap the application, and will ensure your view is initialized according to your application needs.