Es gibt zwei Wege um mit Zend_Application anzufangen, und diese
hängen davon ab, wie man das Projekt beginnt. In jedem Fall beginnt man immer mit der
Erstellung einer Bootstrap-Klasse und einer entsprechenden
Konfigurationsdatei.
Wenn man plant Zend_Tool zu verwenden, um das eigene Projekt zu
erstellen, sollte man unten weiterlesen. Wenn man Zend_Application zu
einem existierenden Projekt hinzufügen will, sollte man hier weiterlesen.
Der schnellste Weg, um mit Zend_Application zu beginnen, ist die
Verwendung von Zend_Tool um das Projekt zu erstellen. Das
erstellt auch die Bootstrap-Klasse und die Datei.
Um ein Projekt zu erstellen, muß einfach das Kommando zf (auf *nix Systemen) ausgeführt werden:
% zf create project newproject
Oder unter Windows das Kommando zf.bat:
C:> zf.bat create project newproject
Beides erstellt eine Projektstruktur, die wie folgt aussieht:
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
Im obigen Diagramm ist die Bootstrap unter
newproject/application/Bootstrap.php und sieht zuerst wie folgt
aus:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}
Sie werden auch bemerken, dass eine Konfigurationdatei unter
newproject/application/configs/application.ini erstellt wurde.
Diese hat den folgenden Inhalt:
[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
Alle Einstellungen in dieser Konfigurationsdatei sind für die Verwendung mit
Zend_Application und der Bootstrap.
Eine andere Datei von Interesse ist die newproject/public/index.php
Datei, welche Zend_Application aufruft und diese ausführt.
// 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();
Um mit dem Quick Start weiterzumachen, springen Sie bitte auf das Ressource-Kapitel.
Die Basis von Zend_Application ist wirklich einfach:
-
Eine Datei
application/Bootstrap.phpmit der KlasseBootstraperstellen. -
Eine Konfigurationsdatei
application/configs/application.inimit der Basiskonfiguration fürZend_Applicationerstellen. -
Ändern von
public/index.phpumZend_Applicationanzupassen.
Zuerst die eigene Bootstrap-Klasse erstellen. Erzeuge eine Datei
application/Bootstrap.php mit dem folgenden Inhalt:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}
Jetzt die Konfiguration erstellen. Für dieses Tutorial, verwenden wir eine
Konfiguration im INI-Stil; man kann natürlich genauso eine
XML- oder PHP-Konfigurationsdatei verwenden.
Erstelle eine Datei application/configs/application.ini, und füge
den folgenden Inhalt ein:
[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
Jetz verändern wir das Gateway Skript public/index.php. Wenn die
Datei nicht existiert, erstellen wir sie; andernfalls ersetzen wir sie mit dem folgenden
Inhalt:
// 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'));
// Typischerweise wird man das eigene library/ Verzeichnis zum include_path
// hinzufügen wollen, speziell wenn es die ZF Installation enthält
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();
Es ist zu beachten, dass die Umgebungskonstante der Anwendung nach einer
Umgebungsvariablen "APPLICATION_ENV" sucht. Wir empfehlen diese im Web Server Environment
zu setzen. In Apache kann man diese entweder in der vhost Definition setzen, oder in der
Datei .htaccess. Wir empfehlen den folgenden Inhalt in der Datei
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]
Mehr über mod_rewrite lernen
Die obigen Rewrite-Regeln erlauben es, auf jede Datei im DocumentRoot des eigenen virtuellen Hosts zuzugreifen. Wenn es Dateien gibt, die man auf diesem Weg nicht bereitstellen will, muss man in seinen Regeln restriktiver sein. Gehe zur Apache WebSite und lerne mehr über mod_rewrite.
An diesem Punkt haben wir es geschafft und können damit beginnen, die Vorteile von
Zend_Application zu nutzen.
Wenn man den Anleitungen von oben gefolgt ist, dann verwendet die Bootstrap-Klasse einen FrontController, und wenn sie gestartet wird, wird sie den FrontController ausführen. Trotzdem wird man mit großer Wahrscheinlichkeit etwas mehr Konfiguration als das benötigen.
In diesem Kapitel werden wir zwei Ressourcen zur Anwendung hinzufügen. Zuerst werden wir Layouts erstellen, und dann werden wir das View Objekt anpassen.
Eine der von Zend_Application angebotenen Standardressourcen ist
die "layout" Ressource. Diese Ressource erwartet, dass man Konfigurationswerte definiert,
welche dann verwendet werden, um unsere Instanz von Zend_Layout
zu konfigurieren.
Um sie zu verwenden, müssen wir die Konfigurationsdatei aktualisieren.
[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
Wenn man es nicht bereits getan hat, muß man das Verzeichnis
application/layouts/scripts/ und die Datei
layout.phtml in diesem Verzeichnis erstellen. Ein gutes Layout zum
Starten ist das folgende (und ist mit der View Ressource verbunden, die als nächstes
besprochen wird):
<?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>
An diesem Punkt haben wir ein funktionierendes Layout.
Jetzt fügen wir eine eigene View Ressource hinzu. Wenn die View initialisiert wird,
will man den HTML DocType und einen Standardwert für den im
HTML-Kopf zu verwendenden Titel setzen. Das kann durch die Änderung
der Bootstrap-Klasse und dem Hinzufügen einer Methode gemacht
werden:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initView()
{
// View initialisieren
$view = new Zend_View();
$view->doctype('XHTML1_STRICT');
$view->headTitle('My First Zend Framework Application');
// View zum ViewRenderer hinzufügen
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
'ViewRenderer'
);
$viewRenderer->setView($view);
// Zurückgeben, damit sie von Bootstrap gespeichert werden kann
return $view;
}
}
Diese Methode wird automatisch ausgeführt, wenn das Bootstrap der Anwendung ausgeführt wird und stellt sicher, dass die View so initialisiert wird, wie die Anwendung das benötigt.
Das oben erwähnte reicht, um mit Zend_Application zu beginnen und
das Bootstrap der eigenen Anwendung zu erstellen. Von hier an sollte man beginnen
Ressource-Methoden zu erstellen, oder für maximale Wiederverwendbarkeit,
Ressource-Plugin Klassen. Lesen Sie weiter, um mehr zu lernen!