Inhalt | 6 |
Vorwort | 14 |
Über dieses Buch | 18 |
Für wen ist dieses Buch gedacht? | 18 |
Weitere Informationen über das Zend Framework | 19 |
Roadmap | 19 |
Codekonventionen und Downloads | 21 |
Author Online | 21 |
Über die Buchreihe | 22 |
Teil I – Die Grundlagen | 24 |
1 Das Zend Framework –Eine Einführung | 26 |
1.1 Die Struktur von PHP-Websites | 27 |
1.2 Gründe für das Zend Framework | 29 |
1.2.1 Alles ist gleich out of the box vorhanden | 29 |
1.2.2 Modernes Design | 30 |
1.2.3 Leicht zu erlernen | 30 |
1.2.4 Vollständige Dokumentation | 31 |
1.2.5 Einfachere Entwicklung | 32 |
1.2.6 Schnelle Entwicklung | 32 |
1.2.7 Strukturierter, leicht zu pflegender Code | 32 |
1.3 Was ist das Zend Framework? | 33 |
1.3.1 Woher stammt das Framework? | 33 |
1.3.2 Was ist darin enthalten? | 34 |
1.4 Die Designphilosophie des Zend Frameworks | 40 |
1.4.1 Komponenten von hoher Qualität | 40 |
1.4.2 Pragmatismus und Flexibilität | 41 |
1.4.3 Saubere Klärung der Rechte auf geistiges Eigentum | 41 |
1.4.4 Support von Zend Technologies | 41 |
1.5 Alternative PHP-Frameworks | 42 |
1.6 Zusammenfassung | 43 |
2 Hello Zend Framework! | 44 |
2.1 Das Designpattern Model-View-Controller | 45 |
2.1.1 Das Model | 46 |
2.1.2 Die View | 46 |
2.1.3 Der Controller | 46 |
2.2 Die Anatomie einer Zend Framework-Applikation | 47 |
2.2.1 Das Verzeichnis application | 47 |
2.2.2 Das Verzeichnis library | 48 |
2.2.3 Das Verzeichnis tests | 48 |
2.2.4 Das Verzeichnis public | 48 |
2.3 Hello World: Datei für Datei | 49 |
2.3.1 Bootstrapping | 49 |
2.3.2 Apache .htaccess | 51 |
2.3.3 Index-Controller | 52 |
2.3.4 View-Template | 53 |
2.4 Wie MVC im Zend Framework angewendet wird | 55 |
2.4.1 Der Controller im Zend Framework | 56 |
2.4.2 Arbeit mit dem Zend_View | 60 |
2.4.3 Das Model in MVC | 64 |
2.5 Zusammenfassung | 68 |
Teil II – Eine Basisapplikation | 70 |
3 Websites mit dem ZendFramework erstellen | 72 |
3.1 Erste Planungsarbeiten für eine Website | 73 |
3.1.1 Die Ziel der Site | 73 |
3.1.2 Das Design der Benutzerschnittstelle | 75 |
3.1.3 Den Code planen | 77 |
3.2 Die ersten Programmzeilen | 78 |
3.2.1 Die Verzeichnisstruktur | 78 |
3.2.2 Die Bootstrap-Klasse | 79 |
3.2.3 Der Start der Applikation | 84 |
3.3 Die Homepage | 84 |
3.3.1 Die grundlegenden Models | 85 |
3.3.2 Tests der Models | 87 |
3.3.3 Der Homepage-Controller | 90 |
3.4 Zusammenfassung | 95 |
4 Die View erstellen | 96 |
4.1 Die Patterns Two-Step-View und Composite-View | 97 |
4.2 Zend_Layout und die Arbeit mit Views | 98 |
4.3 Die Integration von Zend_Layout in Places | 99 |
4.3.1 Setup | 99 |
4.3.2 Layout-Skripte | 101 |
4.3.3 Allgemeine Actions anhand von Platzhaltern | 105 |
4.3.4 Das View-Skript für die Homepage | 109 |
4.4 Fortgeschrittene View-Hilfsklassen | 111 |
4.4.1 Die Integration von Controllern | 112 |
4.4.2 Die Verwaltung der View-Skripte | 114 |
4.4.3 Hilfsklassen für HTML-Kopfzeilen | 115 |
4.5 Zusammenfassung | 120 |
5 Ajax | 122 |
5.1 Kurze Einführung in Ajax | 122 |
5.1.1 Definition von Ajax | 123 |
5.1.2 Ajax in Webapplikationen | 124 |
5.2 Ein einfache Beispiel für Ajax | 126 |
5.3 Die Arbeit mit Client-Libraries für Ajax | 129 |
5.4 Ajax im Zend Framework | 131 |
5.4.1 Der Controller | 132 |
5.4.2 Die View | 133 |
5.5 Integration in eine Zend Framework-Applikation | 134 |
5.5.1 Der Place-Controller | 135 |
5.5.2 Das View-Skript mit HTML fürs Rating ergänzen | 137 |
5.5.3 JavaScript in die View-Skripte einbauen | 138 |
5.5.4 Der Server-Code | 141 |
5.6 Zusammenfassung | 143 |
6 Mit der Datenbank arbeiten | 144 |
6.1 Datenbankabstraktion mit Zend_Db_Adapter | 144 |
6.1.1 Einen Zend_Db_Adapter erstellen | 145 |
6.1.2 Die Datenbankabfrage | 146 |
6.1.3 Einfügen, Aktualisieren und Löschen | 147 |
6.1.4 Spezifische Unterschiede zwischen den Datenbanken | 149 |
6.2 Tabellenabstraktion mit Zend_Db_Table | 149 |
6.2.1 Was ist das Table-Data-Gateway-Pattern? | 150 |
6.2.2 Die Arbeit mit Zend_Db_Table | 151 |
6.2.3 Einfügen und Aktualisieren mit Zend_Db_Table | 152 |
6.2.4 Einträge mit Zend_Db_Table löschen | 154 |
6.3 Zend_Db_Table als Model | 155 |
6.3.1 Das Model testen | 157 |
6.3.2 Tabellenbeziehungen mit Zend_Db_Table | 162 |
6.4 Zusammenfassung | 166 |
7 Benutzerauthentifizierung undZugriffskontrolle | 168 |
7.1 Benutzerauthentifizierung und Zugriffskontrolle | 168 |
7.1.1 Was ist Authentifizierung? | 169 |
7.1.2 Was ist Zugriffskontrolle? | 169 |
7.2 Die Implementierung der Authentifizierung | 170 |
7.2.1 Die Komponente Zend_Auth | 170 |
7.2.2 Einloggen über die HTTP-Authentifizierung | 171 |
7.3 Zend_Auth in einer echten Applikation | 174 |
7.3.1 Das Einloggen | 174 |
7.3.2 Eine Begrüßungsnachricht in der View-Hilfsklasse | 178 |
7.3.3 Das Ausloggen | 179 |
7.4 Die Implementierung der Zugriffskontrolle | 180 |
7.4.1 Die Arbeit mit Zend_Acl | 181 |
7.4.2 Die Konfiguration eines Zend_Acl-Objekts | 183 |
7.4.3 Das Zend_Acl-Objekt prüfen | 184 |
7.5 Zusammenfassung | 188 |
8 Formulare | 190 |
8.1 Die Arbeit mit Zend_Form | 191 |
8.1.1 Integrierte Datenfilter und Validatoren | 191 |
8.1.2 Integrierte Fehlerbehandlung | 194 |
8.1.3 Dekoratoren zur Vereinfachung des Markups | 194 |
8.1.4 Plug-in-Loader zur eigenen Anpassung | 195 |
8.1.5 Internationalisierung | 196 |
8.1.6 Unterformulare und Displaygroups | 196 |
8.2 Ein Login-Formular erstellen | 197 |
8.2.1 Pfade einrichten | 197 |
8.2.2 Das Formular-View-Skript | 197 |
8.2.3 Aktualisierung der Controller-Action AuthController | 198 |
8.2.4 Die Basisklasse für das Login-Formular | 200 |
8.3 Filtern und Validieren | 201 |
8.3.1 Einfaches Filtern und Validieren | 201 |
8.3.2 Eigene Fehlermeldungen | 202 |
8.3.3 Die Internationalisierung des Formulars | 203 |
8.3.4 Selbst erstellte Validatoren | 205 |
8.4 Die Dekoration des Login-Formulars | 207 |
8.4.1 Standarddekoratoren von Zend_Form | 207 |
8.4.2 Eigene Dekoratoren setzen | 207 |
8.5 Zusammenfassung | 211 |
9 Suchfunktionen | 212 |
9.1 Die Vorteile einer Suchfunktion | 212 |
9.1.1 Zentrale Usability-Probleme der User | 213 |
9.1.2 Die Rangliste der Resultate ist wichtig | 213 |
9.2 Die Komponente Zend_Search_Lucene | 213 |
9.2.1 Einen separaten Suchindex für Ihre Website erstellen | 214 |
9.2.2 Leistungsfähige Abfragen | 216 |
9.2.3 Best Practices | 221 |
9.3 Eine Suchfunktion für Places | 222 |
9.3.1 Indexaktualisierung bei neu eingefügten Inhalten | 223 |
9.3.2 Erstellen des Suchformulars und Darstellung der Ergebnisse | 232 |
9.4 Zusammenfassung | 235 |
10 E-Mails | 236 |
10.1 Die Grundlagen von E-Mails | 236 |
10.1.1 E-Mails – einfach dargestellt | 237 |
10.1.2 Analyse einer E-Mail-Adresse | 238 |
10.2 Die Arbeit mit Zend_Mail | 238 |
10.2.1 E-Mails mit Zend_Mail erstellen | 239 |
10.2.2 E-Mails mit Zend_Mail versenden | 240 |
10.3 Einen Support-Tracker für Places erstellen | 243 |
10.3.1 Die Applikation entwerfen | 243 |
10.3.2 Integration von Zend_Mail in die Applikation | 247 |
10.3.3 Header in der Support-E-Mail einfügen | 249 |
10.3.4 Attachments an Support-E-Mails anhängen | 250 |
10.3.5 Formatierung der E-Mail | 251 |
10.4 Lesen von E-Mails | 254 |
10.4.1 Abholen und Speichern von E-Mails | 254 |
10.4.2 E-Mails mit der Applikation lesen | 255 |
10.5 Zusammenfassung | 259 |
11 Deployment | 260 |
11.1 Den Server einrichten | 260 |
11.1.1 Designen für verschiedene Umgebungen | 261 |
11.1.2 Die Arbeit mit virtuellen Hosts in der Entwicklung | 264 |
11.2 Versionskontrolle mit Subversion | 266 |
11.2.1 Erstellen des Subversion-Repositorys | 266 |
11.2.2 Code aus dem Repository auschecken | 267 |
11.2.3 Änderungen ins Repository committen | 268 |
11.2.4 Aktualisierung einer lokalen Arbeitskopie | 269 |
11.2.5 Der Umgang mit Konflikten | 270 |
11.2.6 Eine saubere Kopie aus dem Repository holen | 272 |
11.2.7 Die Arbeit mit Branches | 272 |
11.2.8 Externer Code | 273 |
11.3 Funktionale Tests | 273 |
11.3.1 Funktionales Testen mit Selenium IDE | 274 |
11.3.2 Automatisierung der Selenium IDE-Tests | 277 |
11.3.3 Funktionstests mit Zend_Http_Client | 278 |
11.4 Das Skripting des Deployments | 280 |
11.5 Zusammenfassung | 281 |
Teil III – Machen Sie IhreApplikation leistungsfähiger | 282 |
12 Der Austausch mitanderen Applikationen | 284 |
12.1 Die Integration von Applikationen | 285 |
12.1.1 Austausch strukturierter Daten | 285 |
12.1.2 Produktion und Verarbeitung strukturierter Daten | 286 |
12.1.3 Wie Webservices arbeiten | 287 |
12.1.4 Aufgabengebiete für Webservices | 288 |
12.2 Die Produktion und Verarbeitung von Feeds mitZend_Feed | 289 |
12.2.1 Die Produktion eines Feeds | 289 |
12.2.2 Die Verarbeitung eines Feeds | 291 |
12.3 RPCs mit Zend_XmlRpc erstellen | 292 |
12.3.1 Die Arbeit mit Zend_XmlRpc_Server | 293 |
12.3.2 Die Arbeit mit Zend_XmlRpc_Client | 301 |
12.4 Die Nutzung von REST-Webservices mit Zend_Rest | 302 |
12.4.1 Was ist REST? | 303 |
12.4.2 Die Arbeit mit Zend_Rest_Client | 304 |
12.4.3 Die Arbeit mit Zend_Rest_Server | 307 |
12.5 Zusammenfassung | 309 |
13 Mashups mit öffentlichenWebservices | 310 |
13.1 Der Zugriff auf öffentliche Webservices | 311 |
13.1.1 Zend_Gdata | 311 |
13.1.2 Zend_Service_Akismet | 313 |
13.1.3 Zend_Service_Amazon | 314 |
13.1.4 Zend_Service_Audioscrobbler | 314 |
13.1.5 Zend_Service_Delicious | 314 |
13.1.6 Zend_Service_Flickr | 315 |
13.1.7 Zend_Service_Gravatar | 315 |
13.1.8 Zend_Service_Nirvanix | 315 |
13.1.9 Zend_Service_RememberTheMilk | 316 |
13.1.10 Zend_Service_Simpy | 316 |
13.1.11 Zend_Service_SlideShare | 316 |
13.1.12 Zend_Service_StrikeIron | 316 |
13.1.13 Zend_Service_Technorati | 317 |
13.1.14 Zend_Service_Yahoo | 317 |
13.2 Werbeanzeigen mit Amazon-Webservices darstellen | 318 |
13.2.1 Die Amazon-Model-Klasse | 318 |
13.2.2 Die View-Hilfsklasse amazonAds | 320 |
13.2.3 Die View-Hilfsklasse cachen | 321 |
13.3 Darstellen von Flickr-Bildern | 324 |
13.3.1 Die Flickr-Model-Klasse | 324 |
13.3.2 Flickr in einem Action-Controller verwenden | 326 |
13.4 Mit Zend_Gdata auf Google zugreifen | 328 |
13.4.1 Die YouTube-API in einem Action-Controller | 329 |
13.4.2 Die Seite für die Videokategorien | 330 |
13.4.3 Die Seite mit den Videolisten | 331 |
13.4.4 Die Video-Seite | 333 |
13.5 Zusammenfassung | 334 |
14 Das Caching beschleunigen | 336 |
14.1 Die Vorteile des Cachings | 337 |
14.2 Die Funktionsweise des Cachings | 337 |
14.3 Die Implementierung von Zend_Cache | 341 |
14.3.1 Die Zend_Cache-Frontends | 342 |
14.3.2 Zend_Cache-Backends | 353 |
14.4 Caching auf verschiedenen Ebenen der Applikation | 355 |
14.4.1 Was in den Cache soll | 355 |
14.4.2 Optimale Verfallszeit des Caches | 355 |
14.5 Cache-Tags | 356 |
14.6 Zusammenfassung | 357 |
15 Internationalisierung undLokalisierung | 358 |
15.1 Die Übersetzung in andere Sprachen und Idiome | 358 |
15.1.1 Die Übersetzung in andere Sprachen | 359 |
15.1.2 Die Übersetzung von Idiomen | 360 |
15.2 Die Arbeit mit Zend_Locale und Zend_Translate | 360 |
15.2.1 Die Locales mit Zend_Locale setzen | 360 |
15.2.2 Übersetzung mit Zend_Translate | 362 |
15.3 Eine zweite Sprache für die Places-Applikation | 364 |
15.3.1 Die Auswahl der Sprache | 365 |
15.3.2 Das Front-Controller-Plug-in LanguageSetup | 368 |
15.3.3 Die View übersetzen | 370 |
15.3.4 Datum mit Zend_Locale korrekt darstellen | 372 |
15.4 Zusammenfassung | 374 |
16 PDFs erstellen | 376 |
16.1 Die Grundlagen von Zend_Pdf | 377 |
16.1.1 Erstellen oder Laden von Dokumenten | 377 |
16.1.2 Seiten im PDF-Dokument erstellen | 377 |
16.1.3 Metainformationen im Dokument einfügen | 378 |
16.1.4 Speichern des PDF-Dokuments | 380 |
16.2 Einen PDF-Berichtsgenerator erstellen | 380 |
16.2.1 Das Model für das Berichtsdokument | 380 |
16.2.2 Das Model für die Berichtsseite | 381 |
16.3 Text auf einer Seite zeichnen | 383 |
16.3.1 Die Wahl der Fonts | 383 |
16.3.2 Den Font setzen und Text einfügen | 383 |
16.3.3 Umbrochenen Text einfügen | 384 |
16.4 Die Arbeit mit Farben | 386 |
16.4.1 Die Wahl der Farben | 386 |
16.4.2 Farben einstellen | 386 |
16.5 Die Arbeit mit Styles | 387 |
16.6 Formen zeichnen | 388 |
16.6.1 Linien zeichnen | 388 |
16.6.2 Gestrichelte Linien setzen | 388 |
16.6.3 Rechtecke und Polygone zeichnen | 390 |
16.6.4 Das Zeichnen von Kreisen und Ellipsen | 392 |
16.7 Objekte drehen | 393 |
16.8 Bilder auf der Seite einfügen | 394 |
16.9 Objekte mit Schnittmasken zeichnen | 395 |
16.10 Generierung von PDF-Berichten | 395 |
16.11 Zusammenfassung | 397 |
A Die PHP-Syntax imSchnelldurchgang | 398 |
A.1 PHP-Grundlagen | 399 |
A.2 Variablen und Typen | 400 |
A.3 Strings | 401 |
A.3.1.1 Strings in einfachen Anführungszeichen | 402 |
A.3.1.2 Strings in doppelten Anführungszeichen | 402 |
A.3.1.3 Heredoc-Strings | 403 |
A.3.1.4 Nowdoc-Strings | 403 |
A.4 Arrays | 404 |
A.5 Bedingungen und Schleifen | 405 |
A.5.1 Bedingungen | 405 |
A.5.2 Schleifen | 406 |
A.6 Alternative Syntax für den verschachtelten Block | 409 |
A.7 Funktionen | 409 |
A.8 Zusammenfassung | 410 |
B Objektorientiertes PHP | 412 |
B.1 Objektorientierung in PHP | 413 |
B.1.1 Klassen, Objekte und Vererbung | 413 |
B.1.2 Erweitern von Klassen | 416 |
B.1.3 Abstrakte Klassen und Interfaces | 416 |
B.1.4 Magische Methoden | 419 |
B.2 Die Standard PHP Library | 422 |
B.2.1 Die Arbeit mit Iteratoren | 422 |
B.2.2 Die Arbeit mit ArrayAccess und Countable | 424 |
B.3 PHP4 | 425 |
B.4 Software-Designpatterns | 425 |
B.4.1 Das Singleton-Designpattern | 425 |
B.4.2 Das Registry-Designpattern | 427 |
B.5 Zusammenfassung | 429 |
C Tipps und Tricks | 430 |
C.1 Tipps und Tricks für MVC | 431 |
C.1.1 Module | 431 |
C.1.2 Case Sensitivity | 434 |
C.1.3 Routing | 436 |
C.2 Diagnostik mit Zend_Log und Zend_Debug | 439 |
C.2.1 Zend_Debug | 439 |
C.2.2 Zend_Log | 439 |
C.3 Zend_Db_Profiler | 441 |
C.4 Zusammenfassung | 444 |
Register | 446 |