Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort des Fachgutachters
Vorwort
1 Einleitung
2 Einführung in eZ Components
3 Die Applikationsbasis
4 Fehlerbehandlung und Debugging
5 Konfiguration
6 Datenbankanbindung
7 ORM mit PersistentObject
8 Template
9 Übersetzung
10 Benutzereingaben validieren
11 Authentifizierung
12 Bildverarbeitung
13 Archive und Dateien
14 Mail
15 Logging
16 Diagramme
17 Feeds und Caching
18 Setup
A Inhalt der Buch-CD
Stichwort
Download: - ZIP, ca. 2,7 MB
Ihre Meinung?
<< zurück | Galileo Computing / <openbook> /eZ Components | vor >>
eZ Components von Tobias Schlitt, Kore Nordmann Das Entwickler-Handbuch
eZ Components geb., mit CD 454 S., 39,90 Euro Galileo Computing ISBN 978-3-8362-1073-7 |
| 1 Einleitung
|  | 1.1 eZ Systems
|  |  | 1.1.1 Wie alles begann
|  |  | 1.1.2 Das Geschäftsmodell
|  | 1.2 eZ Components
|  |  | 1.2.1 Wie alles begann
|  |  | 1.2.2 Was sind eZ Components?
|  |  | 1.2.3 Übersicht der Komponenten
|  | 1.3 Das Galileo-Press-Blog
|  |  | 1.3.1 Was soll entwickelt werden?
|  |  | 1.3.2 Aufbau der Beispielanwendung
|  |  | 1.3.3 Testen des GP-Blogs
|  |  | 1.3.4 Rewriting einrichten
|  | 1.4 Der weitere Verlauf
## 1.2 eZ Components Doch nun genug von eZ Publish und eZ Systems im Allgemeinen, denn dieses Buch widmet sich nicht dem Enterprise Content Management System, sondern dem zweiten Produkt der Firma, den eZ Components. Genauer behandeln wir in diesem Buch das Versionspaket 2007.1, das am 2. Juli 2007 erschienen ist. Wir werden zunächst das Konzept hinter eZ Components beleuchten und dann im Hauptteil dieses Buches auf die Verwendung der einzelnen Komponenten detailliert eingehen. Doch zunächst einige allgemeine Informationen rund um die Komponenten-Bibliothek und dieses Buch. ### 1.2.1 Wie alles begann Im Sommer 2005 konkretisierte sich bei eZ Systems der Plan, die aktuelle Version 3.x des ECMS eZ Publish in Zukunft abzulösen und mit der Entwicklung einer neuen Hauptversion zu beginnen. Ziel dieses Versionssprunges war zum einen der Abwurf von Altlasten, die seit Jahren aus Kompatibilitätsgründen im System mitgeschleppt wurden, und zum anderen die Migration des Systems auf die mittlerweile etablierte PHP-Version 5. Im gleichen Zuge sollte die Code-Basis von eZ Publish grundlegend entschlackt und bereinigt sowie verschiedene Features mit Hilfe der neuen Möglichkeiten von PHP 5 reimplementiert werden. Über viele Jahre gewachsen und teilweise projektspezifisch erweitert, stellte der Kern von eZ Publish oftmals selbst die erfahrensten Entwickler vor größere Probleme: Mängel in der API-Dokumentation und Feature-Überlast waren die größten Probleme, mit denen man in den Kern-Bibliotheken zu kämpfen hatte. Als direkte Konsequenz aus diesem Missstand wurde beschlossen, bevor die eigentliche Entwicklung am neuen eZ Publish begann, die Kern-Bibliotheken aufzuräumen und nach PHP 5 zu portieren. Als eigenständiges Projekt sollten die Bibliotheken unter eigenem Namen und von einem ausgesuchten Team gepflegt werden. Konsequenterweise sollte dieses neu entstehende Projekt ebenfalls als Open-Source-Produkt unter der New BSD-Lizenz bereitgestellt werden. Mit Derick Rethans, einem der aktivsten Entwickler der Programmiersprache PHP, wurde dem Projekt ein erfahrenes Mitglied der Open-Source-Community als Projektleiter mitgegeben. Bereits in der Analysephase des Projekts kristallisierte sich heraus, dass eine reine Portierung der aktuellen eZ Publish-Bibliotheken nach PHP 5 selbst unter Einbeziehung des geplanten Refactorings ein aussichtsloses Unterfangen war. Zu viele neue Features von PHP 5, die sowohl den Komfort des Application Programming Interfaces (API) als auch Performance, Stabilität und Qualität des Codes erhöhen konnten, wären ungenutzt geblieben. Aus diesem Grund handelt es sich bei eZ Components zum größten Teil um echte Neuentwicklungen, und nur sehr vereinzelt wurde Code aus eZ Publish übernommen und portiert. ### 1.2.2 Was sind eZ Components? Mit eZ Components stellt eZ Systems eine hochqualitative Bibliothek von lose gekoppelten Komponenten zur Entwicklung von beliebigen Anwendungen mit Hilfe von PHP 5 unter einer Open-Source-Lizenz bereit. Im Fall von eZ Components ist es sehr einfach, diese Worte mit Leben zu füllen und zu untermauern, was wir im Folgenden versuchen wollen. #### Hochqualitative Bibliothek Bei eZ Components handelt es sich um eine Programmbibliothek, wie sie so oder in ähnlicher Form für fast jede Programmiersprache zur Verfügung steht. Auch für PHP existiert schon eine Vielzahl solcher auf den ersten Blick ähnlicher Projekte. eZ Components versuchen sich allerdings sehr erfolgreich, von den Mitstreitern abzuheben. Das von Anfang an angestrebte hohe Qualitätsniveau schlägt sich deutlich in vielen der festgelegten Entwicklungsstandards nieder: Ein strikt geregelter Prozess für die Aufnahme neuer Komponenten und das Hinzufügen von Features zu bestehenden trägt ebenso dazu bei wie die penible Einhaltung des Coding-Stils. Jede neue Komponente und jedes neue Feature muss mit einer genauen Designspezifikation einhergehen. Erst nach ausführlicher Diskussion auf der öffentlichen Mailingliste kann mit der Implementierung begonnen werden. Doch bevor es daran geht, das ausgearbeitete Design mit Code-Leben zu füllen, muss die API in PHP-Code geformt und ausführlich dokumentiert werden. Erst nachdem, getreu dem Paradigma der testgetriebenen Entwicklung, Unit-Tests für die API erstellt wurden, beginnt die eigentliche Entwicklung. Besonders der letzte Faktor stellt sicher, dass zwischen zwei Versionen einer Komponente die bisherige API nicht geändert wird und auf Basis von eZ Components entwickelte Applikationen nach dem Update auf eine neue Version ihren Dienst nicht plötzlich versagen. Außerdem wird eine große Anzahl von Fehlern bereits von vornherein ausgeschlossen und schon die erste Alpha-Version einer Komponente eignet sich für Tests. #### Komponenten Bei der Entwicklung einer Bibliothek sind verschiedene Design-Entscheidungen zu treffen, welche die Struktur und das Einsatzgebiet der enthaltenen Klassen maßgeblich beeinflussen. Eine der wichtigsten Entscheidungen ist hierbei der Umgang mit Abhängigkeiten. Grundsätzlich unterscheiden wir zwei Ansätze: Der Gegensatz zu einer losen Sammlung von Komponenten ist das Framework.
Framework vs. Komponenten
Während ein Framework Ihnen klare Entwicklungsstrukturen vorgibt, die Entwicklung in feste Bahnen lenkt und Ihnen den Ausbruch aus der Framework-Basis damit erschwert, wählt eine Sammlung von Komponenten meist den entgegengesetzten Ansatz. Statt Strukturen vorzugeben, wird Ihnen vollkommene Freiheit gewährt, was den Stil Ihrer Entwicklung und die Struktur Ihrer Applikation anbelangt. Abhängigkeiten werden vermieden, und es ist erklärtes Designziel, dass möglichst jede Komponente völlig eigenständig einsetzbar sein soll, um diese auch in bestehende Applikationen zu integrieren. Der Begriff Komponente bezeichnet hierbei die innere Strukturierung der Bibliothek. Anstatt eine Vielzahl einzelner Klassen als Bibliothek bereitzustellen, werden Pakete von Klassen ihrem Zweck entsprechend gebündelt. Jede Komponente deckt ein bestimmtes Aufgabenfeld ab.
Diesem Ansatz folgend, verfügen eZ Components bisher nicht über eine Front-Controller-Komponente, wie sie oft in einem dem Model-View-Controller-(MVC-) Entwurfsmuster folgenden Framework anzutreffen ist. Eine derartige Komponente würde Ihren eigenen Entwicklungsstil stark einschränken. Allerdings werden Sie in Kapitel 3, »Die Applikationsbasis«, sehen, dass es mit Hilfe der eZ Components durchaus sehr einfach und bequem möglich ist, eine flexible und voll auf Ihre eigenen Bedürfnisse zugeschnittene MVC-Implementierung zu erstellen. eZ Components lassen Ihnen die Freiheit zu entscheiden, welches Designparadigma Sie Ihrer Applikation zu Grunde legen und wie Sie es implementieren. Eigene Implementierungen bieten einen gravierender Vorteil, falls Sie kein Freund des MVC Patterns sind, oder bereits über ein selbst entwickeltes Framework verfügen. Sie können als Basis auch auf eines der zahlreichen Frameworks in der PHP-Szene zurückgreifen, und nur einzelne Komponenten verwenden. Viele Applikation unterliegen auch so speziellen Anforderungen, dass sich ein spezielles Framework nur schwer einsetzen ließe.Vielleicht wird in der nächsten Version von eZ Components zumindest eine rudimentäre Beispielimplementierung eines MVC integriert werden, da sehr große Nachfrage danach besteht. #### Lose Kopplung eZ Components gehen sogar noch einen Schritt weiter und definieren sich selbst als lose gekoppelte Komponenten-Bibliothek. Natürlich kann es auch bei der Strukturierung von Komponenten zu Abhängigkeiten zwischen den einzelnen Paketen kommen. Je nach Abgrenzung der Aufgabenfelder kommt es zu Überschneidungen und es kann sinnvoll sein, dass zwei Komponenten aufeinander aufbauen oder miteinander interagieren können. Dies kann bedeuten, dass eine einzelne Komponente Abhängigkeiten zu mehreren anderen Komponenten aufweist und diese Komponenten wiederum Abhängigkeiten zu weiteren Komponenten implizieren. Letztendlich kann dies dazu führen, dass ein Anwender für die Verwendung einer einzelnen Komponente die komplette Bibliothek installieren muss und das Konzept der Strukturierung in Komponenten somit verfehlt wurde. Aus diesem Grund haben eZ Components das Konzept sogenannter Tieins eingeführt. Ein Tiein ist eine eigenständige Komponente, welche als einzige Aufgabe hat, zwei Komponenten, die potentiell voneinander abhängig sind, zu verbinden. Zwar kann so nicht verhindert werden, dass es im Einzelfall sinnvoll ist, eine Komponente auf einer anderen aufbauen zu lassen, doch die Überschneidung von Anwendungsfeldern und die Interaktion zwischen Komponenten lassen sich so hervorragend bewältigen. Ist es möglich, aber nicht notwendig, dass eine Komponente mit einer anderen interagiert und jede der beiden Komponenten für sich genutzt werden kann, so wird in eZ Components die Integration der Funktionalitäten in eine Tiein-Komponente ausgelagert. Ein Tiein verbindet also die Funktionalitäten von zwei oder mehr Komponenten. Ein Beispiel für dieses Konzept ist das EventLogDatabaseTiein, welches die Komponenten EventLog und Database verbindet. EventLog stellt, wie der Name bereits suggeriert, Funktionalitäten zum Logging bereit, während Database sich um Datenbankanbindung kümmert. Natürlich benötigt keine der beiden Komponenten zwingend die andere: Ein Datenbanksystem verfügt meist über eigene Logging-Mechanismen, und eine Log-Komponente ist durchaus dazu geeignet, ohne Datenbankverbindung auszukommen. Und doch kann es sinnvoll sein, Log-Nachrichten in einer Datenbanktabelle vorzuhalten. In diesem Fall stellt das EventLogDatabaseTiein die Verbindung von EventLog zur Database-Komponente her und die gewünschte Funktionalität bereit, ohne dass EventLog eine feste Abhängigkeit auf Database besitzt. So gewährleisten eZ Components, dass zur Verwendung einer einzelnen Komponente nicht das komplette Paket genutzt werden muss. Einzig die Komponente namens Base wird von allen anderen verwendet, da sie grundlegende Elemente wie Basis-Exception-Klassen bereitstellt. Mehr über die Base-Komponente erfahren Sie in Kapitel 2, »Einführung in eZ Components«. Hier klicken, um das Bild zu vergrößern Abbildung 1.1 Abhängigkeiten zwischen Komponenten mittels Tieins #### Beliebige Anwendungen und PHP 5 Da die Ursprünge von PHP im Webbereich liegen, konzentrieren sich immer noch viele PHP-basierte Applikationen und Bibliotheken auf dieses Gebiet. Erklärtes Ziel der eZ Components ist es, nicht nur eine Basis für Webapplikationen, sondern für beliebige Anwendungen im Unternehmensumfeld bereitzustellen. So enthält die Sammlung neben gängigen Webkomponenten zum Beispiel auch eine Komponente namens ConsoleTools, die Sie bei der Erstellung von Shell-Anwendungen unterstützt. Eine Übersicht über alle Komponenten und einen entsprechenden Verweis zur detaillierten Besprechung in späteren Kapiteln finden Sie in Abschnitt 1.2.3, »Übersicht der Komponenten«.
PHP-Version
Als Basis setzen eZ Components PHP ab Version 5.1 voraus. Lediglich die UserInput-Komponente verlangt Version 5.1.1, da mit dieser Version einige gravierende Änderungen gegenüber 5.1 korrigiert wurden. Mit den Versionen ab 5.2 sind Sie immer auf der sicheren Seite und müssen nicht befürchten, dass einzelne Komponenten nicht korrekt funktionieren. Allerdings wird in jeder Komponente getestet, ob Ihre Umgebung problematisch ist.
eZ Components setzen zu großen Teilen keine PHP-Erweiterungen voraus, die nicht in der Standarddistribution der Sprache enthalten sind. Generell wird die Verwendung dieser sogenannten Extensions vermieden bis auf Ausnahmen wie der Standard-PHP-Library [http://php.net/spl ] (SPL) und einigen Komponenten-spezifischen Erweiterungen wie PHP Data Objects [http://php.net/pdo ] (PDO), welche von der Database-Komponente verwendet wird. Eine Referenz der Erweiterungen, die eine Komponente voraussetzen, finden Sie im Hauptverzeichnis der Komponente in der Datei DEPS, sofern diese existiert. Ist dies nicht der Fall, liegen keine speziellen Abhängigkeiten vor. #### Open Source Im Gegensatz zu eZ Publish werden die eZ Components unter einer wesentlich weniger restriktiven Open-Source-Lizenz bereitgestellt: der New BSD License. An diese Lizenz sind nur sehr wenige Einschränkungen und Pflichten für Sie als Anwender des Produktes gebunden. Sie können ohne Weiteres alle eZ Components in Ihren (auch kommerziellen) Applikationen verwenden, solange Sie die Copyright-Informationen intakt lassen. Ebenfalls erlaubt ist es, eZ Components mit Ihrer Anwendung mitzuliefern. Detaillierte Informationen zur Lizenzierung erhalten Sie unter der Adresse http://ez.no/ezcomponents/license. ### 1.2.3 Übersicht der Komponenten Um Ihnen eine Übersicht über die Komponenten zu geben, die in eZ Components enthalten sind, werden alle Pakete an dieser Stelle kurz vorgestellt. Aus Platz- und Praktikabilitätsgründen gehen wir in diesem Buch auf einige wenige Komponenten nicht detaillierter ein. Sollte dies bei einer Komponente der Fall sein, wird jeweils ein kurzer Hinweis dazu gegeben. Ansonsten finden Sie zu jeder Komponente eine Referenz, in welchem Kapitel die Komponente besprochen wird. #### Archive Mit Hilfe der Archive-Komponente sind Sie in der Lage, verschiedene Archiv-Formate zu verarbeiten. Neben gängigen Varianten des TAR-Formats wird das ZIP-Format unterstützt. TAR-Archive lassen sich mit Hilfe von PHP-Stream-Wrappern [http://php.net/stream ] , GZIP oder BZIP2 komprimieren und ebenfalls entpacken. Letzteres funktioniert allerdings nur bei installierter ZIP-, bzw. BZIP-Extension. Archive können gelesen, erzeugt und auf unterschiedliche Weisen manipuliert werden, worauf wir in Kapitel 13, »Archive und Dateien«, eingehen werden. #### Authentication Authentifizierung spielt besonders bei Webapplikationen eine wesentliche Rolle. Denn es muss bei fast jeder Anfrage geprüft werden, ob ein Benutzer auch wirklich derjenige ist, für den er sich ausgibt. Oft werden für diesen Mechanismus eigene Datenbanken gepflegt, sodass sich ein Benutzer auf jeder Internetseite erneut anmelden und seine Anmeldung verifizieren muss, um später authentifiziert zu werden. Die Authentication-Komponente stellt daher Funktionalitäten bereit, um gegen verschiedenste Dienste Authentifizierungen durchzuführen. Beispiele hierfür sind LDAP-Server, die Services TypeKey [http://www.sixapart.com/typekey/ ] und OpenID [http://openid.net/ ] sowie .htaccess-Dateien. Auch die Authentifizierung von Benutzern über eine eigene Datenbank wird mit Hilfe des AuthenticationDatabaseTiein unterstützt. Die Authentication-Komponente wird in Kapitel 11, »Authentifizierung«, vorgestellt. #### Base Die Base-Komponente stellt zentrale Funktionalitäten für alle weiteren Komponenten bereit. Sie ist die einzige Komponente, für die jedes andere Paket eine Abhängigkeit aufweist. In der Base-Komponente werden unter anderem alle Exception-Klassen verwaltet, auf die weitere Komponenten Zugriff haben müssen. Außerdem stellt sie den eZ Components Autoload-Mechanismus bereit und bietet oft genutzte Funktionalitäten an. Näheres zur Base-Komponente können Sie in Kapitel 2, »Einführung in eZ Components«, nachlesen. #### Cache Das Ziel der meisten Webapplikationen ist es, dynamisch generierte Daten bereitzustellen, weshalb bei jedem Aufruf einer Seite der Inhalt komplett neu generiert wird. Problematisch wird dies jedoch auf Seiten, die hoher Last ausgesetzt sind. Hier werden Datenbankabfragen oder komplexe Berechnungen schnell zum Flaschenhals, der die Antwortzeiten der Anwendung negativ beeinflusst. Aus diesem Grund sollten Sie bereits frühzeitig analysieren, welche Teile einer Applikation wirklich hochdynamisch sind, und Daten, die sich nur in gewissen Zeitabständen oder unter gewissen Voraussetzungen ändern, entsprechend zwischenspeichern. Die Cache-Komponente unterstützt Sie bei dieser Vorgehensweise und erlaubt es Ihnen, Daten in bestimmten Zeitabständen neu generieren zu lassen, worauf wir in Kapitel 17, »Feeds und Caching«, eingehen werden. #### Configuration Nahezu jede Applikation ist konfigurierbar, womit sich ihr Verhalten beeinflussen lässt. Die Configuration-Komponente erlaubt das komfortable Lesen und Schreiben von Konfigurationsdateien im ini-Format. Durch den modularen Aufbau der Komponente ist es einfach, Backends für eigene Konfigurationsformate zu implementieren. Mehr zum Thema Configuration-Komponente erfahren Sie in Kapitel 5, »Konfiguration«. #### ConsoleTools Wie bereits in Abschnitt 1.2.2, »Was sind eZ Components?«, bemerkt wurde, eignet sich die Bibliothek nicht nur zur Erstellung von Webanwendungen, sondern mit Hilfe von ConsoleTools lässt sich die Entwicklung von Shell-basierten Anwendungen stark vereinfachen. Die Ausgabe von formatiertem und koloriertem Text, von Tabellen und Statusanzeigen sowie die Verarbeitung von Optionen und Argumenten werden von dieser Komponente unterstützt. Sie enthält außerdem ein rudimentäres Dialogsystem. Näheres zu diesen Features können Sie Kapitel 18, »Setup«, entnehmen. #### Database Obwohl für die Vereinheitlichung der verschiedenen Datenbankschnittstellen mit der Einführung von PHP Data Objects (PDO) in PHP 5 bereits einiges getan wurde, birgt auch dieser Ansatz einige Fallstricke. Beispielsweise die uneinheitliche Exception-Behandlung sowie nicht unifizierte Nutzung von Einstellungen. Mit der Database-Komponente werden diese Mankos behoben. Weiterhin bietet Ihnen die Komponente einen zusätzlichen, optionalen Schritt in Richtung Datenbankunabhängigkeit: Mit Hilfe eines SQL-Abstraktionsmechanismus können Sie Datenbankabfragen vollkommen unabhängig von der verwendeten Datenbank erzeugen. Detaillierte Informationen zu dieser Komponente können Sie Kapitel 6, »Datenbankanbindung«, entnehmen. #### DatabaseSchema Nicht nur das Ansprechen von Datenbanken kann abstrahiert werden, um Unabhängigkeit vom zugrunde liegenden System zu erlangen, sondern auch die Struktur des Datenbankschemas, also der Tabellen. Mit Hilfe der DatabaseSchema-Komponente können Sie das Schema einer beliebigen Datenbank auslesen, in einem abstrakten XML-Format speichern und in ein beliebiges anderes unterstütztes Datenbanksystem wieder einspielen. Wenn Sie sich für diese Komponente interessieren, sollten Sie das Kapitel 18, »Setup«, lesen. #### Debug Ein wesentlicher Teil der Entwicklungszeit einer beliebigen Anwendung betrifft das Debuggen also auf das Finden, Analysieren und Beheben von Fehlern. Neben der Unterstützung bei dieser Tätigkeit erlaubt Ihnen die Debug-Komponente, die Ausführungszeit einzelner Teile Ihrer Applikation zu messen und so Flaschenhälse zu identifizieren. #### EventLog Gerade in kritischen Business-Applikationen ist das Loggen von Aktionen ein wichtiges Anliegen, bei dem Sie EventLog unterstützt. In Kapitel 15, »Logging«, werden Sie sehen, wie die Komponente funktioniert, und wie Sie mittels EventLogDatabaseTiein als Logging-Ziel eine Datenbank verwenden. #### Execution Das Auftreten fataler Fehler in einer PHP-Applikation ist eines der ärgerlichsten Ereignisse für Benutzer, Administratoren und Entwickler. Nicht nur, dass durch die Fehlermeldung der Arbeitsfluss des Anwenders gestört und das Layout der betreffenden Webseite zerstört werden kann, es ist ebenfalls möglich, dass sensible Daten mit angezeigten Fehlermeldungen nach draußen dringen. Die Execution-Komponente weiß dies effektiv zu verhindern und wird in Kapitel 4, »Fehlerbehandlung und Debugging«, zusammen mit der Debug-Komponente im Detail vorgestellt. FeedRSS und Co. sind Formate ganz im Zeichen des Semantic-Webs und bereits weit verbreitet. Aus diesem Grund bieten auch eZ Components eine Komponente an, um verschiedene Arten von Informationsfeeds zu erzeugen und zu verarbeiten, darunter RSS in verschiedenen Versionen sowie das Atom-Format. Wie Sie mit der Feed-Komponente umgehen, erfahren Sie in Kapitel 17, »Feeds und Caching«. #### File Obwohl PHP ein breites Spektrum an Dateisystem-Operationen von Hause aus unterstützt, fehlt hier und da eine Kleinigkeit. Die File-Komponente ist zwar klein, gleicht aber genau diese Schwachstellen aus. Einige dieser Funktionen werden Sie in Kapitel 18, »Setup«, kennenlernen. #### Graph Datenvisualisierung, wie sie durch Office-Anwendungen oder spezialisierte Tools bekannt ist, erreichen Sie mit Hilfe der Komponente Graph. Mit ihr erzeugen Sie ebenso beeindruckende wie anschauliche Linien-, Balken-, Torten- und Radar-Diagramme in zwei- oder dreidimensionaler Darstellung. Durch verschiedene Ausgabetreiber schreibt die Komponente in unterschiedlichste Graphikformatewie PNG, JPEG, SVG und sogar Flash. Einige Beispiele und genaue Erläuterungen hierzu finden Sie in Kapitel 16, »Diagramme«, wo neben der Graph-Komponente auch das GraphDatabaseTiein erklärt wird, mit dem Sie Daten direkt aus einer Datenbank heraus verarbeiten lassen können. #### ImageAnalysis und ImageConversion Sehr häufig erlauben es Webapplikationen ihren Benutzern, Bilder hochzuladen, welche auf verschiedene Art verarbeitet und konvertiert werden müssen. Ein Hindernis dabei ist zum einen die unglaubliche Vielfalt von Bildformaten und die von ihnen unterstützten Features und zum anderen die für PHP verfügbaren Mechanismen. Mit Hilfe der ImageAnalysis-Komponente bringen Sie in Erfahrung, um welches Format es sich bei einer Datei handelt und extrahieren Metainformationen. ImageConversion erlaubt Ihnen, Bilder nicht nur zwischen verschiedenen Formaten zu konvertieren, sondern sie auch in mannigfaltiger Weise zu manipulieren. So ist es möglich, Bilder zu skalieren, zu beschneiden, in einen anderen Farbraum zu transferieren, ihnen Rahmen und Wasserzeichen hinzuzufügen und sie mit vielerlei Effekten zu versehen. Wie dies genau geht, erfahren Sie in Kapitel 12, »Bildverarbeitung«. #### Mail Die Mail-Komponente erlaubt Ihnen nicht nur das Erzeugen von E-Mails in verschiedenen Formaten, sondern auch das Versenden über verschiedene Backends wie die integrierte mail()-Funktion von PHP oder direkt über einen SMTP-Server. Plain-Text- und HTML-E-Mails mit und ohne Anhang sowie in beliebiger Codierung lassen sich ebenso einfach erzeugen wie komplexe Formate wie Digest oder Bounce. Daneben kann die Mail-Komponente E-Mails über POP3 und IMAP empfangen und stellt die empfangenen Mails als PHP-Objekte zur Weiterverarbeitung oder zum direkten Versand bereit. Wie dies alles funktioniert, erfahren Sie in Kapitel 14, »Mail«. #### PersistentObject PDO abstrahiert die Programmierschnittstellen der von PHP unterstützten Datenbanksysteme; die Database-Komponente geht einen Schritt weiter und abstrahiert die verschiedenen SQL-Dialekte, um noch unabhängiger vom verwendeten Datenbanksystem zu entwickeln. PersistentObject realisiert auf dieser Basis ein sogenanntes Object Relational Mapping, womit es Ihnen ermöglicht wird, beinahe zu vergessen, dass Sie mit einer Datenbank arbeiten. Außerdem können Sie PHP-Objekte persistent speichern, sie wiederherstellen und manipulieren. Wie dies geht, erfahren Sie in Kapitel 7, »ORM mit PersistentObject«. Zusätzlich kann die Komponente PersistentObjectDatabaseSchemaTiein aus einem beliebigen Datenbankschema oder direkt aus einer Datenbank die von PersistentObject benötigten Klassen-Rohlinge und Konfigurationsdateien erzeugen. PersistentObjectDatabaseSchemaTiein beinhaltet lediglich ein komfortables Shell-Skript zu diesem Zweck und wird daher nicht weiter erläutert. #### PhpGenerator Es passiert nicht häufig, dass Sie von einer Anwendung PHP-Code erzeugen lassen müssen. Aus diesem Grund wird auf die Komponente PhpGenerator, die zum Beispiel intern in der Template-Komponente zum Einsatz kommt, nicht näher eingegangen. #### SignalSlot Bekannt geworden ist der Mechanismus der Signals and Slots durch Applikationen mit Graphical User Interface (GUI), wie sie aus Windows, KDE oder Gnome bekannt sind. Auch in anderen Gebieten bedient man sich mittlerweile dieser Technik, um die Kommunikation von unabhängigen Anwendungsteilen und Plug-ins herzustellen. eZ Components bieten Ihnen zur einfachen Realisierung eines solchen Mechanismus die Komponente SignalSlot an, welche wir in Kapitel 3, »Die Applikationsbasis«, einsetzen, um ein rudimentäres MVC-Pattern zu realisieren. #### SystemInformation Auch wenn PHP einen Großteil des Betriebssystems erfolgreich vor dem Anwendungsentwickler versteckt, kommt es doch zu Situationen, in denen Sie mit Kompatibilitätsproblemen zwischen den Systemen konfrontiert werden. SystemInformation unterstützt Sie dabei, Informationen über das zugrunde liegende System zu sammeln, wie Anzahl und Geschwindigkeit der CPUs, und Funktionalitäten gegebenenfalls abhängig davon zu entwickeln. Da die SystemInformation-Komponente sehr klein und einfach gehalten ist, findet sie in diesem Buch keine gesonderte Erwähnung. #### Template Rasmus Lerdorf, der Erfinder von PHP, hat einmal sinngemäß gesagt, dass PHP bereits eine Template-Sprache sei, und fragte, wieso er eine weitere Template-Sprache darauf aufsetzen solle. In gewissem Sinne können wir Lerdorf rechtgeben. Doch PHP als echte Template-Sprache zu verwenden, bringt auch Unannehmlichkeiten und Gefahren mit sich, da die Komplexität der Sprache in den letzten Jahren stark zugenommen hat. Welcher Webdesigner will sich schon gerne mit echter Programmierung beschäftigen? Ist es ratsam, Templates mit PHP-Code erstellen zu lassen, wenn Benutzer selbst Templates erstellen dürfen? Nein, sicherlich nicht. Dennoch ist Lerdorfs Argumentation nachvollziehbar, in dem Sinne, dass die Verarbeitung einer weiteren Template-Sprache aus PHP heraus einen gewaltigen Geschwindigkeitsverlust darstellen kann. Nicht so mit der Template-Komponente, da diese den geschriebenen Template-Code in nativen PHP-Code kompiliert und wiederverwendet. Somit wird der Overhead gering gehalten. Mehr zu den Funktionen der Template-Komponente erfahren Sie in Kapitel 8, »Template«. #### Translation Internet-Anwendungen sind beinahe von jedem Platz der Erde aus erreichbar, was die Notwendigkeit von mehrsprachigen Anwendungen mit sich bringt. Wie Sie Ihre Anwendung multilingual gestalten und internationalisieren, zeigt Kapitel 9, »Übersetzung«. Ebenfalls wird vom TranslationCacheTiein Gebrauch gemacht, das die Übersetzungsdateien vom handlichen Qt Linguist-Format [http://doc.trolltech.com/4.0/linguist-manual.html ] in PHP-Code kompiliert und zur Wiederverwendung zwischenspeichert. #### Url Dass im Umfeld des Webs häufig URLs verarbeitet werden müssen, versteht sich von selbst, insbesondere wenn man Benutzer- und Suchmaschinen-freundliche Links anbieten und verarbeiten will. Wie dies mit Hilfe der Url-Komponente funktioniert, zeigen wir in Kapitel 3, »Die Applikationsbasis«, in unserem selbstgebauten MVC-Framework. #### UserInput In jeder Anwendung müssen die vom Benutzer übermittelten Daten auf Validität überprüft und gegebenenfalls entwertet werden, um vor potentiellen Angriffen zu schützen. Gerade im Web- und insbesondere im PHP-Umfeld kann eine schwache Überprüfung externer Daten ein enormes Sicherheitsrisiko darstellen. Wie die UserInput-Komponente Sie bei der Meisterung dieses Problems unterstützt, erfahren Sie in Kapitel 10, »Benutzereingaben validieren«. #### Workflow Die Komponente Workflow wurde frisch in Version 2007.1 den eZ Components hinzugefügt. Mit ihr lassen sich komplexe Business-Prozesse abstrakt definieren und abarbeiten. Da dieses Themengebiet eine hohe Komplexität aufweist, verzichten wir in diesem Buch darauf, detailliert auf die Komponente einzugehen. Entsprechend werden wir auch nicht auf die Tiein-Komponenten WorkflowDatabaseTiein und WorkflowEventLogTiein eingehen. Sollten Sie dennoch Interesse an diesen Komponenten haben, finden Sie genauere Informationen in der eZ Components-Onlinedokumentation (siehe Kapitel 2, »Einführung in eZ Components«). ### Ihr Kommentar Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
<< zurück | <top> | vor >>
Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen? Ihre Meinung
Buchempfehlungen
| PHP 5.3 und MySQL 5.1
| Besser PHP programmieren
| Webshops mit Magento
| Sichere Webanwendungen
| PHP 5.3 und MySQL 5.1 - Videotraining
| Apache 2
| Suchmaschinen- Optimierung für Webentwickler
| Joomla! 1.5
Shopping
Versandkostenfrei bestellen in Deutschland und Österreich Info

Copyright © Galileo Press 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

[Galileo Computing]
Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de