4.2. Erste Schritte
Zurück | Kapitel 4. Zend_Controller | Weiter

## 4.2. Erste Schritte

### 4.2.1. Einführung

Das `Zend_Controller` System wurde im Sinne der Erweiterungsmöglichkeiten entwickelt, entweder durch Erstellen von Subklassen, welche die bestehenden Klassen erweitern, oder durch Erstellen neuer Klassen, welche die Interfaces `Zend_Controller_Router_Interface` und `Zend_Controller_Dispatcher_Interface` implementieren.

### 4.2.2. Server Konfiguration

Zend_Controller wurde entwickelt, um moderne Website mit sauberen URIs (wenige oder gar keine Abfrage Parameter) zu unterstützen. Deshalb benötigt die vorgeschlagene Konfiguration für den Webserver eine Unterstützung in Form von URI Rewriting, um alle Anfragen auf eine einzelne Datei ("index.php") umzuleiten, die lediglich `Zend_Controller_Front` lädt. Auf dem Apache Webserver wird dies durch das optionale Modul mod_rewrite erledigt.

Der erste Schritt beim Konfigurieren des Servers ist, mod_rewrite erfolgreich zu installieren und zu aktivieren. Der nächste Schritt ist das Anlegen zweier Dateien im Hauptverzeichnis: .htaccess und index.php. Die .htaccess Datei wird von Apache verwendet und muss eine Regel für mod_rewrite enthalten, um alle Anfragen auf die index.php Datei umzuleiten. Für Entwicklungszwecke ist es oft am einfachsten, eine Regel für mod_rewrite zu schreiben, welche alle Anfragen auf index.php umleitet mit Ausnahme von bestimmten Dateiendungen. Hier ist ein Beispiel einer solchen Datei:

    RewriteEngine on
    RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

Im obigen Beispiel werden alle Anfragen, die keine der genannten Dateiendungen enthalten, an index.php weitergeleitet. Dies ist nützlich für die Entwicklung, allerdings sollten diese Regeln in der Produktionsumgebung so geändert werden, dass stattdessen Verzeichnise ausgeschlossen werden.

### 4.2.3. Ladedatei

Nach dem Aufsetzen der .htaccess Datei wird eine neue Datei mit Namen `index.php` erstellt. Dies ist eine Ladedatei (englisch bootstrap file). Der Zweck der index.php Datei ist nur, Zend_Controller_Front zu laden, dessen Datei idealerweise außerhalb des Hauptverzeichnisses liegt.

| Anmerkung
Die Ladedatei sollte die einzige PHP Datei sein, die im Hauptverzeichnis abgelegt ist.

Aus Sicherheitsgründen empfiehlt Zend sehr stark, keine PHP Dateien in Verzeichnissen abzulegen, die vom Webserver aus erreichbar sind (solche, die unterhalb des Hauptverzeichnis liegen). Während dies nicht in jeder Umgebung möglich ist, z.B. beim Shared Hosting, sollte dies als optimales Verfahren (best practice) betrachtet und befolgt werden, wenn immer es möglich ist.

Erstelle eine Ladedatei `index.php` im Hauptverzeichnis, um Zend_Controller_Front zu laden:

    <?php

    require_once 'Zend/Controller/Front.php';

    Zend_Controller_Front::run('/path/to/your/controllers');

    ?>

Siehe den nächsten Abschnitt bezüglich der Pfadangaben `/path/to/your/controllers`. Wie in der `README.txt` Datei angewiesen, sollte das Verzeichnis der Zend Framework Bibliothek im `include_path` enthalten sein. Wenn dies nicht in der `php.ini` Datei gesetzt wird, kann in der `index.php` Datei die Funktion `set_include_path()` vor der Anweisung `require_once()` aufgerufen werden.

| Anmerkung
Zur Zeit werden Lösungen untersucht, die keine Installation von mod_rewrite erfordern. Wir beabsichtigen, eine Konfiguration für System mit und ohne mod_rewrite Möglichkeiten vorzuschlagen. Außerdem beachte bitte, dass das System nicht speziell an Apache oder mod_rewrite gebunden ist. Jeder Webserver mit ähnlichen Umleitungsmöglichkeiten sollte ausreichen.

### 4.2.4. Verzeichnisstruktur

Für Websites, die auf dem Zend Framework aufsetzen, wird die Verwendung einer gemeinsamen Verzeichnisstruktur empfohlen. Während dies nicht in jedem Fall möglich ist, sollte es in vielen, vielleicht in den meisten Fällen so sein. Die Entscheidung, diese Struktur zu übernehmen, macht deinen Code für jemanden leichter verständlich, der mit den Konventionen des Zend Frameworks vertraut ist.

Die vorgeschlagene Verzeichnisstruktur besteht aus dem Verzeichnis für Bibliotheken (von Zend oder anderen) und dem Verzeichnis für die Applikation.

    /application
      /models
      /views
      /controllers
    /document_root
      /images
      /styles
      .htaccess
      index.php
    /library
      /Zend

| Anmerkung
Dieser Abschnitt ist noch nicht fertig. Er ist in Bearbeitung und unterliegt laufenden Änderungen.

### 4.2.5. IndexController

Jede Website muss einen Controller mit Namen `IndexController` definieren. Dies ist der Controller, der aufgerufen wird, wenn kein Controller in der URI angegeben ist, wie z.B. in dieser URI:

    http://framework.zend.com/

Die `IndexController` Klasse muss in einer Datei mit dem Namen `IndexController.php` abgelegt werden und diese Datei muss im Controller Verzeichnis abgelegt werden. Der `IndexController` muss `Zend_Controller_Action` erweitern. Hier ist ein Beispiel für einen `IndexController`:

    <?php

    require_once 'Zend/Controller/Action.php';

    class IndexController extends Zend_Controller_Action
    {
    	public function indexAction()
    	{
    		echo 'Hello from IndexController';
    	}

    	public function noRouteAction()
    	{
    		$this->_redirect('/');
    	}
    }

    ?>

| Anmerkung
Dieser Abschnitt ist noch nicht fertig. Er ist in Bearbeitung und unterliegt laufenden Änderungen.

Zurück | Nach oben | Weiter
Kapitel 4. Zend_Controller | Zum Anfang | 4.3. Subclassing