Eine Webapplikation mit dem Zend Framework erstellen

Da wir immer wieder neue ZF-Projekte für unsere Kunden erstellen, wollte ich mal meine Erfahrungen im Erstellen einer Webapplikation mit dem Zend Framework bekanntgeben.

Dieser Artikel liegt schon etwas und bezieht sich deshalb auf die Version 1.8.0 des Frameworks. Aber der Grundaufbau des Frameworks hat sich kaum geändert, so dass die hier geschriebenen Dinge eine gewisse Zeit ihre Richtigkeit haben werden.

Meine genutzten Referenzen:

Eingesetztes Framework:

Umgebung:

  • Windows XP
  • XAMPPlite 1.7.3 mit PHP 5.3.1, Apache 2.2.14

Bei ipunkt arbeiten wir zwar ausschließlich auf Ubuntu-Systemen, aber der Anschaulichkeit wegen hier mal ein Tutorial auf Windows-Basis.

1. Kommandozeilentool zf verfügbar machen

Nach dem Download des Zend Framework Paketes des Paket entpacken.

zf/bin und zf/library/Zend irgendwo hin entpacken, danach zf/bin in PATH-Umgebungsvariable ergänzen. Danach auf die Eingabeaufforderung wechseln.

2. Neues Projekt anlegen

Mein Workspace-Verzeichnis für Eclipse ist C:\workspace.

ZF-Projekt anlegen mit dem ZF-CLI-Tool

C:\workspace> zf create project zf-app
Creating project at C:/workspace/zf-app
Note: This command created a web project, for more information setting up your
VHOST, please see docs/README

In der Datei docs/README.txt steht drin, wie ich den VHOST konfigurieren muss und das kann ich eigentlich 1:1 übernehmen.

Mit dem zf-create-project-Befehl wurde ein komplettes Projektverzeichnis angelegt mit folgendem Inhalt:

zf-app
│   .zfproject.xml
│
├───application
│   │   Bootstrap.php
│   │
│   ├───configs
│   │       application.ini
│   │
│   ├───controllers
│   │       ErrorController.php
│   │       IndexController.php
│   │
│   ├───models
│   └───views
│       ├───helpers
│       └───scripts
│           ├───error
│           │       error.phtml
│           │
│           └───index
│                   index.phtml
│
├───docs
│       README.txt
│
├───library
├───public
│       .htaccess
│       index.php
│
└───tests
	│   phpunit.xml
	│
	├───application
	│       bootstrap.php
	│
	└───library
		bootstrap.php

Kurze Erläuterung der einzelnen Verzeichnisse und Dateien:

  • .zfproject.xml beinhaltet alle Projekteinstellungen, die ich mit dem zf-cli-Tool mache
  • application beinhaltet die für meine Applikation notwendigen Klassen und Dateien.
    Die application.ini im configs Verzeichnis regelt das Applikationsverhalten weitestgehend und kann vom Bootstrap.php ergänzt werden.
    Die Bootstrap.php kann das Standardverhalten beeinflussen und sollte grundlegende Definitionen vornehmen für Datenbankverbindungen, Cache-Verhalten, Verwaltung von Session, Registry, Locale, Translation und einigen
    weiteren.
    Auf die Verzeichnisse controllers, models und views wird erst im späteren Verlauf eingegangen.
  • docs sollte man auch für die Dokumentation der eigenen Applikation nutzen. Datenbankmodelle und Serverkonfiguration oder Requirements passen hervorragend hier hin.
  • library beinhaltet alle Bibliotheksdateien, bspw das Zend Framework sollte hier unter library/Zend zu finden sein.
    Für Nutzer eines Repositories sollte man hier des Zend Framework als External einbinden.

    $> svn propadd svn:external Zend http://framework.zend.com/svn/framework/standard/tags/release-1.8.0/library/Zend/
  • public ist der DocumentRoot des Webservers. Dort liegt die Startdatei index.php und eine .htaccess, die das Routing für das Zend Framework übernimmt. Für eine performantere Abarbeitung des Routing empfiehlt sich das Routing komplett in die httpd.conf des Apache zu übertragen und gänzlich auf .htaccess Files zu verzichten. Diese werden – anders als die Konfiguration – ständig gelesen.
  • tests ist der Ordner für TestCases mit PHPUnit und Zend_Test.

Ein wichtiger Punkt für den Laufzeit-Modus der Applikation ist die Umgebungsvariable APPLICATION_ENV. Diese wird laut docs/README.txt auf „development“ eingestellt. Das macht in einer Entwicklungsumgebung Sinn, da auf diesen Modus bezogen auch die Konfigurationsparameter der application.ini geladen werden.

In der index.php steht ebenfalls, dass beim Fehlen dieser Umgebungsvariable automatisch von einer Live- oder Production-Umgebung ausgegangen wird, da man davon ausgeht, dass in einer Entwicklungsumgebung gesonderte Parameter für den Apache eingestellt
werden können, in einer Live-Umgebung ist dies nicht notwendig.

3. Libraries kopieren

Bisher haben wir das Projekt zf-app nur initial erstellen lassen und es fehlt noch das Zend Framework in der Applikation selbst. Dies wird nicht automatisch erstellt, weil man – wie oben beschrieben – diese Bibiothek durchaus per External einbinden kann. Für unser Tutorial gehen wir nun aber mal davon aus, dass wir kein SVN-Repository haben. (Wer das mal eben schnell mit SVN Repository testen möchte, dem kann ich ein demobereich Projekt empfehlen.)

In der index.php verweist ein require_once-Statement auf die Datei Zend/Application.php. Diese fehlt uns derzeit, deshalb würde dort folgender Fehler von PHP kommen.

Warning: require_once(Zend/Application.php) [function.require-once]: failed to open stream: No such file or directory in C:\workspace\zf-app\public\index.php on line 18
Fatal error: require_once() [function.require]: Failed opening required 'Zend/Application.php' (include_path='C:\workspace\zf-app\library;.;\Programme\xampplite\php\PEAR') in C:\workspace\zf-app\public\index.php on line 18

Nachdem Kopieren der Zend-Library nach library/Zend ist dieser Fehler behoben und die index.php kann korrekt starten.

4. VHost einrichten

Wie unter docs/README.txt angegeben den VHost konfigurieren mit den korrekten Pfaden zur eigenen Applikation. Mit XAMPP sieht das bspw. so aus:

NameVirtualHost *:80

ServerName zf-app.loc
DocumentRoot "c:\workspace\zf-app\public"
SetEnv APPLICATION_ENV "development"

Options All
AllowOverride All
Order allow,deny
Allow from all

ErrorLog "c:\Programme\xampplite\apache\logs\zfapp-error.log"
CustomLog "c:\Programme\xampplite\apache\logs\zfapp-access.log" combined

Das ist die leicht angepasste Konfiguration in der Datei c:\Programme\xampplite\apache\conf\extra\httpd-vhosts.conf.

Nun können wir den Apache starten. Wenn der Apache nicht startet, dann liegt meist ein Konfigurationsfehler vor. Konfigurationsfehler lassen sich dabei am besten in der error.log des Apache nachlesen.

Für die Nutzung einer lokalen Domain zf-app.loc muss noch ein Eintrag in der hosts Datei des Betriebssystems gemacht werden. Unter Windows ist das c:\WINDOWS\system32\drivers\etc\hosts, unter Linux
ist das /etc/hosts.

127.0.0.1	zf-app.loc

Eine Konfiguration von anderen Webserver kann hier nachgelesen werden.

5. Webapplikation testen

Jetzt im Browser die URL zf-app.loc aufrufen und man müßte folgende Seite sehen:

So, das war der erste Teil des Tutorials. Hiermit kann jeder eine laufende Zend Framework Webapplikation erstellen – ohne Vorkenntnisse. Tiefergehende Anpassungen werden im nächsten Tutorial erklärt.

Falls Ihr Ideen, Fragen und Anregungen dazu habt, dann einfach kommentieren und ich versuche all Eure Kommentare entsprechend zu beantworten.