Anzeige
Anzeige
UX & Design
Artikel merken

PHP-Komponenten für Enterprise-Anwendungen: eZ Components

Mit den eZ Components stellt zum ersten Mal eine professionelle PHP-Firma eine stabile Bibliothek zur Erstellung von Enterprise-PHP-Applikationen bereit. An dieser Stelle soll ein Überblick über die Komponentenbibliothek eZ Components gegeben werden.

9 Min. Lesezeit
Anzeige
Anzeige

eZ Systems, Hersteller des Open-Source-Content-Management-Systems eZ Publish, befasst sich bereits seit 1999 ausschließlich mit der Erstellung von Produkten und dem Angebot von Dienstleistungen rund um PHP. Mit mittlerweile über 80 Mitarbeitern an weltweit fünf Standorten zählt eZ Systems zu den Größten der PHP-Szene. Seit eineinhalb Jahren entwickelt eZ Systems an den eZ Components, der Basis für die neue Version von eZ Publish. eZ Components ist eine auf den Enterprise-Bereich ausgerichtete Sammlung von hochqualitativen und -flexiblen PHP-Komponenten zur Entwicklung von Webanwendungen und anderen Applikationen. Dieser Artikel soll die Möglichkeiten und Fähigkeiten der unter der New-BSD-Lizenz stehenden Komponenten-Bibliothek beleuchten.

Anzeige
Anzeige

Generell setzt die eZ-Components-Bibliothek PHP 5.1 voraus. Allerdings benötigt in dieser Version die UserInput-Komponente (die für das Validieren und Absichern von Formular-Daten zuständig ist) die Extension „filter“ aus dem PECL-Repository in aktuellster Version. Ab PHP 5.2 ist diese im Standard-PHP-Paket enthalten. Da zwischen PHP-Version 5.1 und 5.2 mehrere Inkonsistenzen aufgetreten sind, empfiehlt sich grundsätzlich, sowohl PHP als auch eZ Components in neuster Version zu verwenden. Zurzeit liegt eZ Components in Version 2006.2 vor, also das 2. Haupt-Release des Jahres 2006. Diese und alle vorhergehenden Versionen sowie Beta-Releases sind als Komplett-Paket unter [1] erhältlich. Alternativ kann man eZ Components sowie die einzelnen Pakete über den PEAR-Installer installieren [2].

Qualität

Neben den Features sollte man bei der Auswahl einer Programmier-Bibliothek auch die Code- und Dokumentations-Qualität als Kriterien miteinbeziehen. Auf beide Aspekte richten die eZ Components einen besonderen Fokus. Ein strikt geregelter Entwicklungsprozess, der ein ausführliches Design-Dokument, die anschließende Entwicklung von Test-Cases für sämtliche Methoden und erst im Anschluss daran die eigentliche Entwicklung vorschreibt, sowie ausführlich definierte Coding-Standards sollen zur hohen Qualität der eZ Components beitragen. So umfassen die Unittests der Bibliothek, bei denen alle Klassen eingeschlossen werden, aktuell 90 Prozent des Codes. Im Bereich Dokumentation schreibt der Entwicklungsprozess vor, dass die Entwickler alle Methoden (public, protected und private) bereits bei der initialen Programmierung ausführlich im Code (phpDocumentor Syntax) dokumentieren. Die aktuelle API-Dokumentation ist online verfügbar [3] und enthält für jede Komponente die Dokumentation aller „public“ zur Verfügung stehenden Klassen, Methoden und Attribute.

Anzeige
Anzeige

Für jede Komponente existiert ein ausführliches Einstiegs-Tutorial, das den generellen Umgang mit der Komponente beschreibt und praktische Code-Beispiele gibt. Darüber hinaus enthält die Dokumentation der komplexeren Komponenten weitere Informationen, etwa zur Syntax der Template-Sprache und zu allen in der Template-Sprache verfügbaren

Anzeige
Anzeige

Funktionen und Konstrukten. Das Entwicklerteam der eZ Components nimmt sich vor jedem Stable-Release drei bis vier Wochen Zeit, um alle Komponenten anhand von Beispiel-Applikationen zu testen und die Dokumentation zu überprüfen. Zahlreiche Artikel auf der Website von eZ Systems geben weitere Starthilfe, und eine Sammlung von praktischen Beispielapplikationen unterstützt dabei. Zudem bietet die Community in der Entwickler-Mailingliste unter components@lists.ez.no Support.

MVC nach Art des Hauses

Da es sich bei eZ Components um eine Klassenbibliothek und nicht um ein Framework im eigentlichen Sinne handelt, sucht man eine MVC-Implementierung vergebens. Dies muss jedoch kein Nachteil sein, denn eine Umsetzung des Model-View-Controller-Konzepts ist mit den verfügbaren Komponenten ein Leichtes. Eine eigene Umsetzung verspricht nicht nur die optimale Implementierung für den Einsatzzweck, sondern auch einen Performance-Vorteil vor Standard-Varianten, da auf überflüssige Features und eine zu allgemeine Implementierung verzichtet werden kann. Als Basis für einen Controller stellt eZ Components die URL-Komponente bereit, die für die Verarbeitung von URLs in einem beliebigen, benutzerdefinierten Format zuständig ist. Zusätzlich ist eine Komponente namens „SignalSlot“ verfügbar, die eine Art standardisierten Observer-Mechanismus nach dem Vorbild der Qt-Komponente „Signals and Slots“ bereitstellt. Hiermit lässt sich das Dispatching auf Action-Controller komfortabel und schnell realisieren. Für die Entwicklung einer Plugin-Schnittstelle der zu entwickelnden Applikation eignet sich die SignalSlot-Komponente ebenfalls hervorragend. Zur Implementierung des Model-Parts von MVC bietet sich die Komponente „PersistentObject“ an. Für die Darstellungsschicht (View) bietet sich die eZ-Components-eigene Template-Engine an.

Anzeige
Anzeige

Ansichtssache

Die Template-Komponente bietet eine flexible Engine zur Verarbeitung und Befüllung von Schablonen. Hierbei ist die Komponente nicht auf das HTML-Format beschränkt, sondern lässt sich durch die Verwendung so genannter Kontexte auch für andere Ausgaben wie Plaintext (z. B. für E-Mails) konfigurieren. Auch komplexere Ausgabeformate wie PDF sind durchaus denkbar. In der Standardeinstellung sorgt die Template-Engine für die sichere Darstellung eines HTML-Dokuments, verhindert also beispielsweise Cross-Site Scripting. Die implementierte Template-Sprache hat starke Ähnlichkeiten mit der des bekannten Template-Systems Smarty. Allerdings verzichtet eZ Components auf zahlreiche Features und bietet eine Vielzahl von vorbereiteten Funktionen und Kontrollstrukturen mit äußerst konsistenter API. Alle Templates werden bei ihrer ersten Verwendung in reinen PHP-Code kompiliert, was die Ausführungsgeschwindigkeit ab dem zweiten Zugriff drastisch erhöht, ohne Webdesignern den ungeliebten und möglicherweise gefährlichen Zugriff auf PHP selbst zu gewähren. Eine ausgeklügelte Erweiterungsschnittstelle erlaubt die Integration eigener Funktionen und die Entwicklung eigener Template-Blöcke. Aufgrund des ausgeklügelten Template-Systems verzichtet eZ Components auf eine Komponente, die HTML-Formularfelder generiert. Die bereits erwähnte Komponente „UserInput“ kümmert sich jedoch auf Basis der PHP-Extension „filter“ um die Validierung und Absicherung von Formulardaten.

Freie Wahl

Zwei Komponenten sorgen für die Datenbank-Abstraktion und stellen drei Abstraktionsebenen zur Verfügung. Auf unterster Ebene ist die Komponente „Database“ für eine weitere API-Vereinheitlichung der PHP-5-eigenen Abstraktion namens PDO zuständig. Hier werden zum Beispiel die von PDO doch recht wirr geworfenen Exceptions vereinheitlicht und ein Singleton-Mechanismus angeboten. Darüber hinaus bietet die Database-Komponente einen SQL-Abstraktionsmechanismus, mit dem sich auf Basis von PHP-Objekten Datenbankabfragen unabhängig von der zu Grunde liegenden Datenbank erstellen lassen. Eine Migration von einem Datenbanksystem auf ein anderes wird damit leicht und transparent möglich. Auch erweiterte Features, wie die aus MySQL bekannte LIMIT-Klausel, werden von der Abstraktionsschicht für alle unterstützten Datenbanken unter einer einheitlichen API zur Verfügung gestellt. Zurzeit unterstützt die Database-Komponente MySQL, SQLite, PostgreSQL und Oracle – die Unterstützung des MS-SQL-Servers ist geplant.

Für die dritte Abstraktionsschicht ist die Komponente „PersistentObject“ verantwortlich. Sie bietet nach dem Vorbild von Java Hibernate einen Mechanismus zum Objekt-Relational-Mapping, der das Ablegen von PHP-Objekten in einer relationalen Datenbank erlaubt. Objekte können transparent aus der Datenbank geladen, manipuliert, gespeichert und gelöscht werden. Außerdem kümmert sich „PersistentObject“ um die zwischen den Objekten bestehenden Beziehungen. Im Gegensatz zu manch anderer Implementierung im PHP-Umfeld erwartet „PersistentObject“ nicht, dass die Klasse eines zu speichernden PHP-Objekts eine bestimmte Basis-Klasse erweitert oder ein bestimmtes Interface implementiert. Somit wird ermöglicht, die Objekt-Struktur der zu entwickelnden Applikation völlig frei zu gestalten. „PersistentObject“ greift auf die SQL-Abstraktion von „Database“ zurück und ist somit ebenfalls völlig unabhängig vom verwendeten Datenbanksystem. Zusätzlich zu den eigentlichen Abstraktionskomponenten ermöglicht das Paket „DatabaseSchema“, die Struktur einer Datenbank unabhängig vom verwendeten Datenbanksystem zu speichern und aus diesem Schema die Datenbankstruktur in einem der oben genannten Systeme zu erzeugen. Ein von einer Datenbank unabhängiges Setup einer Anwendung ist somit ein Kinderspiel. Auch das Abspeichern von Unterschieden zwischen verschiedenen Versionen einer Datenbankstruktur sowie das Einspielen dieser Änderungen sind möglich.

Anzeige
Anzeige

Nachschlag

Den komfortablen Lese- und Schreibzugriff auf Konfigurationsdateien stellt die Komponente „Configuration“ bereit. Sie unterstützt das INI-Format, die Architektur der Komponente erlaubt allerdings das einfache Erstellen eigener „Backends“ für ein beliebiges anderes Konfigurations-Format. Auf eine Komponente zur Verarbeitung von XML verzichten die eZ Components, da PHP 5 hier eigene ausgereifte Mechanismen bereitstellt, etwa die DOM-Extension und SimpleXML. Es existiert jedoch eine Komponente namens „Feed“, mit der das Empfangen und Erstellen von verschiedensten XML-Feed-Typen (z. B. RSS2) möglich ist. Die Feed-Komponente befindet sich zurzeit im Alpha-Stadium, eine stabile Version soll Bestandteil des kommenden Gesamt-Release 2007.1 sein. Eine Ajax-Komponente existiert bisher in eZ Components nicht.

Auch dem Thema Caching nehmen sich die eZ Components an. Die Cache-Komponente ermöglicht das Zwischenspeichern von skalaren Datentypen und Arrays auf der Festplatte. Hierbei kann zwischen verschiedenen Cache-Mechanismen gewählt werden, darunter die Speicherung als Plaintext-Datei sowie als PHP-Sourcecode. Letztere Variante ermöglicht es, gespeicherte Inhalte auf einer weiteren Ebene durch einen Opcode-Cache wie etwa APC oder die Zend Performance Suite zu cachen. Auch die Cache-Komponente ist modular aufgebaut, was die Anbindung weiterer Speichermedien, etwa einer Datenbank, erleichtert.

Neben den für den Heftschwerpunkt „PHP aus dem Baukasten“ maßgeblichen Komponenten halten eZ Components eine Vielzahl weiterer Pakete bereit. So existiert eine Komponente, die Logging-Mechanismen bereitstellt. Nicht nur das Loggen in verschiedenen Formaten (z.B. das Unix-Message-Log-Format) und auf verschiedene Medien (wie Dateisystem und Datenbank) wird unterstützt, auch das Ziel für unterschiedliche Log-Nachrichten ist über Filter-Regeln frei definierbar. So ist es denkbar, dass Fehlerinformationen über eine eigene Erweiterung direkt per E-Mail versandt und gleichzeitig in eine Logdatei geschrieben werden, Legacy-Nachrichten hingegen zur Auswertung und Überprüfung in einer Datenbank landen. Für das Logging während des Entwicklungsprozesses stellen eZ Components eine eigene Komponente bereit, die Ausführungszeiten messen und aggregieren kann sowie Debug-Logging ohne viel Overhead ermöglicht.

Anzeige
Anzeige

Ebenfalls sehr nützlich ist die Komponente „Archive“, die eine einheitliche objektorientierte Schnittstelle zum Erstellen, Manipulieren und Extrahieren vieler Archivdateitypen bereitstellt. So lassen sich verschiedene TAR- und ZIP-Formate verarbeiten.

Kunst per Quelltext

Zur Verarbeitung von Grafiken haben die eZ Components einige Pakete an Bord. Mit ImageAnalysis lassen sich existierende Grafik-Dateien mit Hilfe verschiedener Backends (PHP-Extension GD, ImageMagick) ansprechen. Für die Manipulation von Bildern ist die ImageConversion-Komponente verantwortlich. Sie bietet ein ausgeklügeltes Filter-System, mit dem sich Bilder komfortabel bearbeiten lassen. So ist es möglich, Bilder zu skalieren oder zu beschneiden, sie mit einem Rahmen zu versehen oder in einen anderen Farbraum zu übertragen. Außerdem lassen sich Watermark-Bilder sehr einfach einfügen, mit Hilfe von ImageMagick stehen sogar Effekte wie Rauschen und Swirl zur Verfügung.

Ein Highlight der letzten Haupt-Version von eZ Components ist die Komponente „Graph“. Mit ihrer Hilfe lassen sich verschiedenste Datenreihen grafisch aufbereiten. Nicht nur, dass die Graph-Komponente bereits eine Vielzahl von Darstellungstypen unterstützt (Line-, Bar- und Pie-Charts), auch für grafische Effekte, wie man sie aus Office-Paketen kennt, ist gesorgt. Für die Ausgabe der erzeugten Graphen stehen verschiedene Bildformate (über die GD-Extension) sowie das XML-Vektorformat SVG (über die PHP-DOM-Extension) und sogar Adobe Flash (mit Hilfe der Ming-Extension) bereit.

Anzeige
Anzeige

Eine weitere nützliche Komponente hört auf den Namen „Mail“. Mit ihr ist es nicht nur möglich, einfache Text-E-Mails zu erzeugen und zu versenden, sondern auch komplexe HTML-E-Mails inklusive Anhängen und eingebetteten Bildern. Daneben unterstützt die Mail-Komponente eine Vielzahl weiterer E-Mail-Formate wie Digest und Bounce. Versendet werden können E-Mails über die in PHP verfügbare Funktion „mail()“, aber auch direkt über einen SMTP-Server, auf der Basis einer eigenen Versand-Implementierung der Komponente. Neben dem Versand von E-Mails erlaubt das Mail-Paket auch den Empfang. Über die Protokolle POP3 und IMAP3/4 lassen sich E-Mails aus Postfächern abholen. Dabei stellt die Komponente empfangene Post direkt wieder als Mail-Objekte bereit, die manipuliert und sogar direkt versandt werden können. Zum Beispiel ist es möglich, mehrere empfangene E-Mails direkt zu einer neuen Digest-E-Mail zusammenzustellen und zu versenden (das Digest-Format wird von den meisten E-Mail-Programmen zum Weiterleiten mehrerer Nachrichten auf einmal verwendet).

Ausblick

Die eZ Components werden von fünf Hauptentwicklern der Firma eZ Systems stetig weiterentwickelt. Zusätzlich steuern auch externe Kontributoren Code zu dem Open-Source-Projekt bei. Jeder, der an eZ Components mitentwickeln möchte, ist dabei verpflichtet, ein Contributor-License-Agreement (CLA) zu unterzeichnen. Dies soll zum einen sicherstellen, dass einfließender Code auch wirklich selbst entwickelt wurde. Durch die Übertragung des Copyrights an eZ Systems soll zudem eine rechtliche Absicherung für Anwender gewährleistet werden. Das Urheberrecht und entsprechende Hinweise bleiben dem Autor des Codes erhalten.

Einige neue Komponenten, etwa ein Authentifizierungspaket, sind für die kommenden Versionen von eZ Components in Planung. Zudem werden die bestehenden Komponenten stetig um neue Features erweitert. Hierbei geht das Entwicklungsteam allerdings sehr kleinschrittig vor und hat sich als Maßgabe gesetzt, zuerst der Stabilität der bestehenden Komponenten Rechnung zu tragen, bevor Erweiterungen hinzugefügt werden. Zurzeit werden die eZ Components bereits in vielen Kundenprojekten verwendet, etwa beim von der Firma Waterproof vertriebenen Issue-Tracker wIT [4]. Auch erste Open-Source-Projekte nutzen eZ Components bereits offiziell oder binden Teile davon in zukünftige Entwicklungen ein.

Mehr zu diesem Thema
Fast fertig!

Bitte klicke auf den Link in der Bestätigungsmail, um deine Anmeldung abzuschließen.

Du willst noch weitere Infos zum Newsletter? Jetzt mehr erfahren

Anzeige
Anzeige
Schreib den ersten Kommentar!
Bitte beachte unsere Community-Richtlinien

Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.

Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.

Dein t3n-Team

Melde dich mit deinem t3n Account an oder fülle die unteren Felder aus.

Bitte schalte deinen Adblocker für t3n.de aus!
Hallo und herzlich willkommen bei t3n!

Bitte schalte deinen Adblocker für t3n.de aus, um diesen Artikel zu lesen.

Wir sind ein unabhängiger Publisher mit einem Team von mehr als 75 fantastischen Menschen, aber ohne riesigen Konzern im Rücken. Banner und ähnliche Werbemittel sind für unsere Finanzierung sehr wichtig.

Schon jetzt und im Namen der gesamten t3n-Crew: vielen Dank für deine Unterstützung! 🙌

Deine t3n-Crew

Anleitung zur Deaktivierung
Artikel merken

Bitte melde dich an, um diesen Artikel in deiner persönlichen Merkliste auf t3n zu speichern.

Jetzt registrieren und merken

Du hast schon einen t3n-Account? Hier anmelden

oder
Auf Mastodon teilen

Gib die URL deiner Mastodon-Instanz ein, um den Artikel zu teilen.

Anzeige
Anzeige