Zend Framework Quick Start Tutorial

Ich habe mich dazu entschlossen, mir das unter der BSD-Lizenz stehende Zend Framework anzusehen. Dafür bietet Zend ein Quick Start Tutorial an.
Ich erhoffe mir dadurch, noch mehr Struktur in meine zukünftigen PHP-Projekte zu bringen und zusätzlich auf ausgereifte Hilfs-Bibliotheken zurückgreifen zu können.

Ich möchte hier habe nicht auf das ganze Tutorial eingehen, sondern nur kurz meine Stolpersteine aufzählen.

Kein Stolperstein, aber eine für mich neue Richtlinie: keine einzige PHP-Script-Datei enthält das PHP-Schliessen-Tag ?> am Dateiende. PHP scheint das zu tolerieren und beendet das Script normal. Der Grund für diese Richtlinie ist recht praktisch, denn hier kann es gar nicht erst passieren, dass White-Spaces (Leerzeichen, Zeilenumbrüche u.ä.) nach dem Schliessen-Tag dafür sorgen, dass später gesendete Header-Informationen nicht mehr angenommen werden.

In dem Tutorial wird eine Beispiel-Applikation in Form eines Gästebuches gebaut. Als Datenbank wird SQLite verwendet. Dafür musste ich das Debian-Paket php5-sqlite nachinstallieren.
Ausserdem musste der Webserver so konfiguriert werden, dass das public-Verzeichnis als Web-Root-Verzeichnis fungiert. Ich hatte das Test-Projekt erst in einem Unterverzeichnis laufen, was aber zu einem Fehler in der Applikation führte.
Als nächstes musste ich das Verzeichnis für die Datenbank anlegen und mit entsprechenden Rechten versehen, denn sonst konnte das load-Skript nicht die Datenbank anlegen.
Beim Anlegen der Model Klasse habe ich wegen eines Schreibfehler des Tutorial-Skript-Schreibers natürlich ein falsches Verzeichnis gewählt: statt application/model/GuestBook.php muss der Pfad korrekterweise application/models/GuestBook.php lauten – nur ein fehlender Buchstabe, aber dennoch fatal.
Das kommt bei einem der nächsten View-Skripte nochmal vor, ist aber im Gegensatz zu vorher ziemlich offensichtlich: application/views/scipts/guestbook/sign.phtml.
Und schliesslich soll man die zwei Methoden signAction() und _getGuestbookForm()
zur GuestbookController-Klasse hinzufügen, die sind aber in der selben Form bereits vorhanden – eine doppelte Deklaration der Methoden lässt PHP nicht zu und bricht natürlich ab.

Wenn man alle diese Hürden überwunden hat, ist die erste Zend-Applikation fertig und das Tutorial zuende. Leider kann man aber keinen Eintrag ins Gästebuch schreiben, da nach erfolgreichem Eintragen (nur 20 Zeichen und lustiges ASCII-CAPTCHA), ein Application-Error „passiert“: SQLSTATE[HY000]: General error: 8 attempt to write a readonly database.
Das liegt daran, dass ich das load-Skript als Benutzer ausführen musste (ich hatte dafür sogar extra das php5-cli Paket installiert). Die dadurch erstellte DB-Datei hatte dadurch natürlich die falschen Rechte, denn bei Zugriff über Webbrowser, muss der Webserver Zugriffsrechte auf die Datei haben. Bei mir reichten chown ric:www-data guestbook-dev.db und chmod ug+rw guestbook-dev.db.
Trotzdem bekommt man bei einem neuen Eintrag immer noch eine Fehlermeldung: SQLSTATE[HY000]: General error: 14 unable to open database file . Das war diesmal aber mein eigener Fehler, denn ich hatte vergessen, das Verzeichnis db der korrekten Gruppe zuzuweisen. Ich hatte es für data gemacht, aber nicht das R-Flag (rekursiv) bei chown gesetzt.

Jetzt funktioniert meine erste Zend-Applikation – und bisher sind meine Erwartungen zu Struktur und Mächtigkeit nicht enttäuscht worden. Das Tutorial hat zwar ein paar Schwachstellen, aber im Grossen und Ganzen bekommt man einen guten Einblick in die Funktionsweise des Frameworks.
Wenn man sich den Stress des Selbst-Zusammenbauens dieser Tutorial-Applikation nicht geben will, kann natürlich auch den Code als fertiges Paket herunterladen. Einen Link dazu gibt es auf jeder Seite des Tutorials.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>