Zend Framework 3 - Das Umfassende Handbuch - Amazon Web Services, Inc.

Transcription

Wissen, wie’s geht.LeseprobeDiese Leseprobe verrät Ihnen zuerst die Grundlagen und Besonderheiten von Zend Framework 3. Schauen Sie dann, wie Sie mitMiddleware Anwendungen einrichten, bevor Sie mit Controllernund Views richtig tief in MVC einsteigen. Außerdem können Sieeinen Blick in das vollständige Inhalts- und Stichwortverzeichnisdes Buches werfen.»Einführung in das Zend Framework 3« (Auszug)»Middleware-Anwendungen einrichten« (Auszug)»Controller und View (Auszug)InhaltsverzeichnisIndexDer AutorLeseprobe weiterempfehlenRalf EggertZend Framework 3 – Das umfassende Handbuch960 Seiten, gebunden, 2. Auflage 201644,90 Euro, ISBN 978-3-8362-3965-3www.rheinwerk-verlag.de/4016

Kapitel 1Einführung in das Zend Framework 3Bevor ich mit Ihnen in die Zend Framework 3-Projekte einsteige, lernenSie in diesem Kapitel grundlegende Konzepte und technische Aspektekennen. Zudem lernen Sie die Framework-Varianten und die Anwendungen kennen, mit denen Sie sich in diesem Buch beschäftigen werden.Das Zend Framework (http://framework.zend.com/) wird seit über 10 Jahren von ZendTechnologies und einer großen internationalen Community entwickelt. Zend Framework 1 (kurz ZF1) erschien im Jahr 2007, und die Nachfolgeversion, Zend Framework 2(kurz ZF2), erblickte im Jahr 2012 das Licht der Welt. Zend Framework 3 (kurz ZF3)wurde 2016 veröffentlicht und ist der logische nächste Schritt in der Evolution.1.1 Was ist das Zend Framework 3?Das Zend Framework 3 ist gleichermaßen ein PHP-Framework sowie eine Sammlungvon Komponenten für den Aufbau von Anwendungen auf Basis von PHP.Sie können mit dem ZF3 sowohl klassische Webanwendungen als auch API-Serveraufbauen. Zusätzlich bietet das Zend Framework 3 auch alle Komponenten für dasSchreiben leichtgewichtiger Konsolenanwendungen. Durch das offene Konzept eignet sich das Zend Framework 3 sowohl für kleine und mittelgroße Anwendungen alsauch für den Betrieb komplexer Enterprise-Anwendungen.1.2 An wen richtet sich dieses Buch?Dieses Buch richtet sich gleichermaßen an Einsteiger in das Zend Framework 3 undan Umsteiger vom ZF2 sowie vom ZF1. Sie müssen kein Profi in den beiden Vorgängerversionen sein, um sich zurechtzufinden. Ein gewisses Maß an Vorwissen im ZendFramework schadet aber sicher nicht,Um mit dem Zend Framework 3 effektiv arbeiten zu können, sollten Sie solide Erfahrungen in der objektorientierten Programmierung (OOP) mit PHP haben. Begriffe wieInterfaces, abstrakte Klassen, Sichtbarkeit oder Vererbung sollten für Sie keine Fremdwörter sein. Um Ihr Wissen etwas aufzufrischen, schauen Sie bitte in Anhang A,»Objektorientierte Programmierung in PHP«.311

1Einführung in das Zend Framework 31.3Außerdem sind grundlegende Kenntnisse von Entwurfsmustern (engl.: Design Patterns) in PHP hilfreich. Entwurfsmuster wie Factory, Table Data Gateway oder dasRepository Pattern sollten Sie zumindest einmal gehört haben. Auch sind Erfahrungen mit Architekturmustern wie dem bekannten Model-View-Controller von Vorteil.Sollten Ihnen diese Begriffe neu sein, schauen Sie in Anhang B, »Architekturmusterund Entwurfsmuster«.Lassen Sie sich aber nicht entmutigen, wenn Ihnen einige Begriffe oder Sachverhaltenicht auf Anhieb bekannt sind. Manche Bezeichnungen und Ausdrücke sind demeinen Entwickler total geläufig, während ein anderer davon noch nie gehört hat. Dieses Buch kann nicht jeden Aspekt der modernen Webentwicklung in aller Breiteerläutern. Lassen Sie sich dadurch nicht entmutigen, und machen Sie es sich zur täglichen Angewohnheit, unbekannte Begriffe im Internet zu recherchieren. Sie glaubengar nicht, wie oft ich bei meiner täglichen Arbeit nach unbekannten Abkürzungen,Fachbegriffen oder Softwareparadigmen im Netz suche, um sie besser zu verstehen.1.3 Warum das Zend Framework 3 einsetzen?Das Angebot an PHP-Frameworks ist heutzutage riesengroß. Der Markt scheint seitJahren gesättigt zu sein, sodass es Neulinge recht schwer haben. Doch warum solltenSie sich für das Zend Framework 3 entscheiden, wenn Sie mit Ihrem alten Frameworkseit Jahren erfolgreich Projekte umsetzen? Für einen Wechsel zum ZF3 sprechen verschiedene Gründe (siehe Abbildung 1.1).EinfacheMigrationvom ZF2Warum das Zend Framework 3 einsetzen?Schauen Sie sich zudem als Einstimmung auch die kurze Fallstudie zu einem Projektan, das bereits vom Zend Framework 2 auf das Zend Framework 3 gewechselt ist(siehe Infokasten).Fallstudie über Migration vom ZF2 zum ZF3Die Firma BORDONARO IT GmbH & Co. KG hat es bereits geschafft und ein umfangreiches Projekt, das auf dem ZF2 basierte, zum Zend Framework 3 migriert. Das Projekt myMedax, eine komplexe Software zur digitalen Anamnese in Arztpraxen undKrankenhäusern, wurde im Kundenauftrag erstellt (http://www.mymedax.de/). Esbasierte auf dem ZF2 und litt unter einer verbesserungswürdigen Performance.Dino Bordonaro fasst seine Erkenntnisse nach der Migration zum Zend Framework 3wie folgt zusammen:왘 Die Performance der Anwendung hat sich verdoppelt bis verdreifacht. Die Lade-zeiten konnten von 700 bis 1.400 Millisekunden auf 200 bis 500 Millisekundenreduziert werden.왘 Die Migration der fast 50 Module zur 3er-Version von Zend\Mvc konnte ein Zwei-mannteam in 6 Manntagen abschließen.왘 Allein fast 500 Factorys mussten dabei refaktoriert werden, um die Performance-vorteile der 3er-Version vom Zend\ServiceManager ausreizen zu können.왘 Kleinere Probleme gab es beim Einsatz der View-Helper, da im ZF3 die Schreib-weise in Groß- und Kleinschreibung genau beachtet werden muss.Alles in allem hat sich die Migration mehr als ausgezahlt. Dabei wurde bisher nochnicht auf das schnelle Zend\Expressive gewechselt.Unterstützungfür PHP 71.3.1 Warum vom ZF1 oder ZF2 migrieren?ZF1 EOLKontinuitätWenn Sie bereits mit einer älteren Version vom Zend Framework arbeiten, fragen Siesich vielleicht, was für einen Wechsel auf die neueste Generation des Zend Frameworks sprechen könnte. Es folgen ein paar Denkanstöße.왘 Ende September 2016 hat das ZF1 das EOL (End of Life) erreicht. Es wird somit nichtGründe fürZend Framework r weiterentwickelt und auch nicht mehr mit Sicherheitspatches versehen. DasEnde des offiziellen Supports für das ZF1 und die veraltete Technik machen einenWechsel auf die modernere Generation des Zend Frameworks notwendig. Wervom ZF1 migrieren möchte, muss sich jedoch auf viel Handarbeit einstellen.왘 Das ZF3 stellt im Vergleich zum ZF2 ein evolutionäres Update dar. Umsteiger vomEntkoppelteKomponentenFlexibilitätZF2 finden sich schnell zurecht, und die Migration vom ZF2 ist deutlich einfacher alsauf die Vorgängerversion. Einem schnellen Wechsel steht somit nichts entgegen.왘 Das ZF3 ist schneller, leichter zu warten und konsistenter als das ZF2. Zudem wur-Abbildung 1.1 Gründe für den Einsatz vom Zend Framework 332den die Komponenten weiter entkoppelt, d. h., die Abhängigkeiten zu anderen331

1Einführung in das Zend Framework 31.3Warum das Zend Framework 3 einsetzen?Komponenten wurden stark reduziert. Damit wird es noch leichter, bei Bedarf nurausgewählte Komponenten in einem Projekt einzusetzen. Auch dies spricht füreinen zeitnahen Wechsel vom ZF2 zum ZF3.Wer mit seinem aktuellen PHP-Framework unzufrieden ist und mit dem Gedankenspielt, auf ein anderes zu wechseln, findet hier ein paar Gründe für einen Wechselzum Zend Framework 3.왘 Mit dem neuen Middleware-Konzept gibt es im ZF3 eine schlankere Alternativezum klassischen MVC-Konzept. Dennoch wurde der bewährte MVC-Ansatz weiteroptimiert, sodass Sie für Ihr Projekt die Wahl zwischen zwei ebenbürtigen Alternativen haben.왘 Die meisten PHP-Frameworks sind seit ihrer ersten Generation als Full-Stack-왘 Das Zend Framework 3 ist PHP 7 ready. Damit setzt es die neueste PHP-Versionzwar nicht voraus, läuft damit aber reibungslos. Alle Inkompatibilitäten ältererPHP-Versionen wurden entfernt. Auch wenn das ZF3 nicht die neuen Features vonPHP 7 ausnutzt, können Sie dennoch sorglos Ihre neuen Projekte gleich mit PHP 7aufsetzen.Akzeptanz von PHP 7Ein großes Problem von PHP 5 war die jahrelang sehr schleppende Akzeptanz. NeueMinor-Releases wurden nur zögerlich von der Community auf Produktionsserverneingesetzt. Doch erste Meldungen im Sommer 2016 zeigen, dass die Akzeptanz vonPHP 7 vor allem aufgrund der verbesserten Performance deutlich schneller voranschreitet.Der aktive Support für PHP 7.0 endet am 3. Dezember 2017, und danach wird dasMinor-Release noch ein weiteres Jahr mit Sicherheitspatches versorgt. Für Ende 2016ist zudem schon PHP 7.1 angekündigt. Es spricht also nichts dagegen, frühzeitig aufPHP 7 zu wechseln.Framework konzipiert. Dies sind meist geschlossene Systeme, die dem Entwicklerviele Entscheidungen abnehmen und für alle Aspekte einer Webanwendung einepassende Komponente bereitstellen. Erst in den letzten Jahren haben sich diemeisten Frameworks nach außen geöffnet und bieten ihre entkoppelten Komponenten auch separat an. Dies ist auch durch den Siegeszug der PaketverwaltungComposer (siehe Abschnitt 1.6.7) bedingt.왘 Das Zend Framework war schon immer ein Komponentenframework, anders, alsder Name vermuten lässt. Somit lässt es sich auch mit PEAR vergleichen oder ingrauer Vorzeit mit phpLib. Sie haben beim Zend Framework 3 in vielen Aspektenimmer eine Wahlfreiheit. Sie werden nicht gezwungen, eine bestimmte TemplateEngine oder ein ORM (Object Relational Mapper) zu verwenden, weil das Framework Ihnen dies mehr oder minder vorschreibt. Wenn Sie diese Flexibilität brauchen, sind Sie beim Zend Framework 3 genau richtig.왘 Das Zend Framework 3 zeichnet sich durch seine Flexibilität aus. Sie können imZF3 die MVC-Implementation verwenden, müssen es aber nicht. Sie können alternativ das Middleware-Konzept einsetzen, sind aber auch dazu nicht gezwungen.Sie können auch Ihre eigene MVC-Implementation oder die eines anderen Frameworks verwenden und müssen dennoch nicht auf den Einsatz von Zend-Framework-Komponenten verzichten.왘 Ein weiterer Vorteil ist die Kontinuität, die das Zend Framework 3 Ihnen bietet. Sie1.3.2 Warum vom anderen Framework wechseln?Seit dem Jahr 2015 haben mit CakePHP, TYPO3 Flow, Symfony und dem Zend Framework die meisten relevanten PHP-Frameworks die 3er-Version und damit ein neuesMajor-Release veröffentlicht.Software-Releasesmüssen sich nicht gefühlt jedes Jahr mit einem neuen Major-Release auseinandersetzen, das wieder einmal das gerade Gelernte komplett über den Haufen wirft.왘 Es gibt immer wieder neue PHP-Frameworks, die extrem angesagt sind, und somancher Entwickler fühlt sich verleitet, diese für ein neues Projekt einmal auszuprobieren. Dennoch ist das Zend Framework im professionellen EnterpriseBereich seit Jahren etabliert und wird von international tätigen Unternehmenerfolgreich eingesetzt.Bei der Einteilung von Software-Releases sind drei Stufen zu unterscheiden.Dafür gibt es verschiedene Notationen:왘 Major.Minor.Patch왘 Hauptversion.Nebenversion.Revision왘 Breaking.Feature.FixEin Software-Release mit der Nummer 2.3.4 bezeichnet somit den vierten Patch desdritten Minor-Releases vom zweiten Major-Release oder die vierte Revision der dritten Nebenversion von der zweiten Hauptversion.341.3.3 Welche Konzepte werden im ZF3 implementiert?Das Zend Framework 3 implementiert mehrere technische Konzepte, die dem Entwickler die Arbeit deutlich erleichtern. Diese Konzepte basieren zum Teil auf weitverbreitete Entwurfsmustern, zum Teil aber auch auf bewährten Modellen der Softwareentwicklung. Einen Überblick über einige grundlegende Konzepte im ZF3 findenSie in Abbildung 1.2.351

1Einführung in das Zend Framework 31.3왘 Um Funktionalitäten einer Anwendung zu kapseln und auch wiederverwendbarzu machen, sollte eine Applikation modular aufgebaut sein. Diese Modularitätwird durch den Modul-Manager bereitgestellt. Dieser übernimmt das Laden undKonfigurieren der Module. Die Module können dabei eine Bibliothek mit Klassenund Interfaces bereitstellen, vollständige Funktionalitäten inklusive Controllerund View kapseln oder auch wiederkehrende Aufgaben wie das Logging oder denVersand von E-Mails für eine Anwendung übernehmen. Der Zend\ModuleManagerist im Zend Framework 3 für das Laden und Ausführen aller Module InjectionWarum das Zend Framework 3 einsetzen?Zend Framework Abbildung 1.2 Konzepte im Zend Framework 3왘 Bei der Dependency Injection geht es darum, Abhängigkeiten von Klassen unter-einander lose zu koppeln und zu injizieren, statt innerhalb einer Klasse die anderezu instanziieren. Benötigt die Klasse CustomerTable eine Instanz von DbAdapter,sollte die Klasse DbAdapter z. B. nicht innerhalb der Klasse CustomerTable instanziiert werden (z. B. im Konstruktor). Stattdessen wird der DbAdapter außerhalb derKlasse erzeugt und dann über den Konstruktor oder eine Setter-Methode injiziert.Die Aufgabe der Injizierung von Abhängigkeiten bei der Instanziierung von Objekten übernimmt der Service-Locator, der im Zend Framework in der KomponenteZend\ServiceManager implementiert wird. In diesem Zusammenhang kommt auchdas Factory-Entwurfsmuster zum Einsatz.왘 Die Trennung einer Anwendung in Model, View und Controller ist in der Webentwicklung weit verbreitet und basiert auf dem Model-View-Controller-Entwurfsmuster (kurz MVC). Im Model wird die Geschäftslogik der Anwendung undmeistens auch die Persistierung der Daten implementiert. Der View ist für die Darstellung zuständig und sollte nur Ausgabelogik enthalten, kann aber auch lesendauf das Model zugreifen. Im Controller wiederum erfolgt das Zusammenspiel allerKomponenten, wobei der Controller Daten an das Model übergibt bzw. vomModel bekommt und diese an den View weiterleitet. Im Controller sollte ausschließlich Controller-Logik enthalten sein. Im Zend Framework 3 wird das MVCEntwurfsmuster in der Komponente Zend\Mvc implementiert.왘 Beim Middleware-Konzept wird ein anderer Ansatz als beim klassischen MVC verfolgt. Die Anfrage (engl.: Request) an einen Server wird normalerweise durch dasSenden einer Antwort (engl.: Response) abgeschlossen. Die Idee hinter diesem Konzept ist, dass sich die Middleware zwischen den Request und die Response einklinkt.Dabei können beliebige Middleware-Container auch hintereinander ausgeführtwerden. Mit der Komponente Zend\Expressive hat das Zend Framework 3 somit eineleichtgewichtige Alternative zur MVC-Implementation geschaffen. Zend\Expressivewird in diesem Zusammenhang auch als Zend Framework light bezeichnet.Neben diesen grundlegenden Konzepten und Entwurfsmustern werden im Zend Framework 3 weitere Konzepte und Entwurfsmuster implementiert, auf die ich an geeigneter Stelle eingehe.왘 Mit der ereignisgesteuerten Entwicklung (engl.: event-driven architecture) ist esmöglich, die Funktionalitäten von Klassen lose zu koppeln. Dabei wird die Funktionalität der anderen Klasse nicht direkt in einer Klasse aufgerufen. Stattdessenwird ein Ereignis über den sogenannten Event-Manager verarbeitet. In diesemEvent-Manager sind verschiedene Event-Listener registriert, die auf die Ereignisselauschen und ihre Arbeit erst dann aufnehmen, sollte »ihr« Ereignis angestoßenwerden. Somit können in einem OrderService beim Speichern einer Bestellungmithilfe eines Event-Managers der Versand von Bestellbestätigungen per E-Mailoder die Prüfung und Aktualisierung der Warenwirtschaft angestoßen werden. ImZend Framework 3 übernimmt der Zend\EventManager diese Aufgaben, wobei dieEvent-Listener auch das Observer-Entwurfsmuster implementieren.361.3.4 Wofür das Zend Framework einsetzen?Das Zend Framework 3 ist sehr flexibel, und es gibt verschiedene Einsatzzwecke, beidenen das ZF3 das Mittel Ihrer Wahl sein sollte.왘 Sie können mit dem Zend Framework 3 klassische Webanwendungen implemen-tieren. Dabei haben Sie die Wahl zwischen dem MVC-Ansatz mit Zend\Mvc undeiner PSR-7-kompatiblen Middleware-Anwendung auf Basis von Zend\Expressive.왘 Das Zend Framework 3 unterstützt Sie auch bei der Einrichtung von RESTful Web-services. Dabei haben Sie neben der MVC-Variante und der Middleware-Alternative auch die Wahl, das spezialisierte Apigility einzusetzen.371

1Einführung in das Zend Framework 3왘 Auch Konsolenanwendungen lassen sich mit dem Zend Framework 3 implemen-tieren. Erneut können Sie zwischen MVC und Middleware wählen, haben aber mitZF\Console eine weitere Auswahlmöglichkeit.Wie Sie sehen können, ist das Zend Framework 3 für sehr unterschiedliche Einsatzzwecke und Projekte geeignet. Details zu den verschiedenen Installationsvarianten finden Sie auch in Abschnitt 1.7.1.4 Aufbau des BuchesDas Buch ist in insgesamt sechs Teile und 24 Kapitel aufgeteilt. Sie können das Buchsowohl von Anfang bis Ende lesen als auch sich gezielt die Teile und Kapitel heraussuchen, die Sie gerade am meisten interessieren. Dennoch sind Teil V und der Anhang eher zum Nachschlagen als zum kompletten Durchlesen gedacht.1.4.1 Teil ITeil I, »Grundlagen«, enthält ein Kapitel.왘 In Kapitel 1, »Einführung in das Zend Framework 3«, lernen Sie die Vorteile undGründe für den Einsatz des Zend Framework 3 kennen. Außerdem erfahren Siealles zu den technischen Voraussetzungen und den Installationsvarianten. Zudemwerden Ihnen alle Beispiel- und Übungsanwendungen vorgestellt.1.4Aufbau des BuchesInput-Filter mit Zend\InputFilter erstellen können und wie Sie sich von Zend\Formbeim Aufbau und der Ausgabe von Formularen unterstützen lassen können.왘 In Kapitel 6, »Internationalisierung«, kümmern Sie sich um die Internationalisierung einer Middleware-Anwendung mit Zend\I18n. Sie erfahren darin unter anderem, wie Sie einen Sprachschlüssel in die Routen integrieren und den Locale fürdie Anwendung setzen können. Außerdem erfahren Sie alles Wissenswerte zumÜbersetzen der Texte Ihrer Anwendung.왘 In Kapitel 7, »Authentifizierung und Autorisierung«, erfahren Sie Details zurZugriffskontrolle Ihrer Benutzer. Dabei werden die Benutzerrechte mit Zend\Permissions\Rbac und die Sessions mit Zend\Session konfiguriert. Zudem erfolgt dieAuthentifizierung mit Zend\Authentication, und Sie erweitern die MiddlewarePipeline um die Autorisierung Ihrer Benutzer.왘 In Kapitel 8, »Zend\Expressive-Anwendung optimieren«, erhalten Sie hilfreicheTipps, wie Sie eine schnell gewachsene Middleware-Anwendung verbessern können. Unter anderem wird ein mehrstufiges Layout eingerichtet, ein View-Helperfür die Formularausgabe integriert und Traits zur Codereduktion eingesetzt.왘 In Kapitel 9, »Unit-Tests für Middleware-Anwendungen«, können Sie sich ganzder Qualitätssicherung der Middleware-Anwendung widmen. Sie erfahren, wie Sieerstellte Middleware-Aktionen und die Middleware für die Pipeline testen können.Doch auch das Testen der Formulare und Modelklassen kommt dabei nicht zu kurz.1.4.3 Teil IIITeil III, »MVC-Anwendungen«, enthält sieben Kapitel.1.4.2 Teil IITeil II, »Middleware-Anwendungen«, enthält acht Kapitel.왘 In Kapitel 2, »Middleware-Anwendungen einrichten«, steigen Sie in das Konzeptder Middleware-Anwendungen ein und installieren die Beispielanwendung.Außerdem lernen Sie den Aufbau einer Zend\Expressive-Anwendung sowie derModule kennen.왘 In Kapitel 3, »Routing, Actions und Templates«, legen Sie ein neues Modul anund richten das Routing für die Middleware-Anwendung mit Zend\Router ein.Zudem werden die benötigten Aktionen für Zend\Expressive und Templates fürZend\View erstellt, und die Middleware-Konfiguration wird umgesetzt.왘 In Kapitel 4, »Datenbanken und Repositorys«, dreht sich alles um die Anbindungder Middleware-Anwendung an eine Datenbank mit Zend\Db. Sie richten denDatenbankadapter und Storage-Klassen ein. Sie implementieren die notwendigenRepositorys und binden diese in die Aktionen ein.왘 In Kapitel 5, »Formulare und Benutzereingaben«, wird die Middleware-Anwendung um die Verarbeitung von Benutzereingaben erweitert. Sie erfahren, wie Sie38왘 In Kapitel 10, »MVC-Anwendung einrichten«, richten Sie eine MVC-Anwendungmit Zend\Mvc ein. Dabei wird die Beispielanwendung installiert und der Aufbau derAnwendung sowie der Module erläutert. Auch die eingesetzten Fremdmodulewerden vorgestellt.왘 In Kapitel 11, »Controller und View«, wird die MVC-Anwendung um weitere Module erweitert. Darin werden mit Zend\Mvc das Routing konfiguriert und ActionController angelegt sowie Templates mit Zend\View erstellt. Außerdem werden einePaginierung mit Zend\Paginator und ein Menü mit Zend\Navigation integriert.왘 In Kapitel 12, »Model-Layer implementieren«, werden die bisher statischen Datenin der MVC-Anwendung durch einen mehrschichtigen Model-Layer ausgetauscht.Es werden neue Entitäten erstellt und für deren Datenaustausch neue Hydratorenmit Zend\Hydrator implementiert. Danach werden Storages mit Zend\Db\TableGateway aufgesetzt und in die Repositorys integriert.왘 In Kapitel 13, »Formularverarbeitung im MVC«, wird die Möglichkeit geschaffen,die vorhandenen Daten in der MVC-Anwendung auch ändern zu können. Auf Basisvon Zend\InputFilter wird die Eingabevalidierung und -filterung umgesetzt. Zudem391

1Einführung in das Zend Framework 3werden mit Zend\Form neue Formulare implementiert, ausgegeben und validiert.Zudem werden der CKEditor für die HTML-Eingabe sowie Dateiuploads integriert.왘 In Kapitel 14, »Internationalisierung im MVC«, wird die Internationalisierung derMVC-Anwendung umgesetzt. Dabei werden im Wesentlichen das Routing überarbeitet sowie die Textfragmente der Anwendung mit dem Translator von Zend\I18nübersetzt. Außerdem wird ein Sprachwechsler eingerichtet.왘 In Kapitel 15, »Authentifizierung und Autorisierung im MVC«, wird die MVCAnwendung gegen unberechtigten Zugriff abgesichert. Die Benutzerrechte werden mit Zend\Permissions\Acl konfiguriert, und die Authentifizierung wird mitZend\Authentication umgesetzt. Für die Authentifizierung und Autorisierungkommt dabei der Zend\EventManager zum Einsatz. Zudem wird das Menü mit Zend\Navigation je nach Benutzerrolle reduziert und ein User-Widget zum einfachenAn- und Abmelden integriert.왘 In Kapitel 16, »Tests für MVC-Anwendungen«, erfahren Sie, wie Sie Ihre MVCAnwendung mit Unit-Tests und Integrationstests absichern können. Dabei kommtdie Komponente Zend\Test in Kombination mit PHPUnit und DbUnit zum Einsatz.1.5Listings und Programmierstil1.4.6 Anhang1Der Anhang enthält vier Kapitel.왘 In Anhang A, »Objektorientierte Programmierung in PHP«, finden Sie Erläute-rungen für einige grundlegende Begriffe und Konzepte aus der objektorientiertenProgrammierung mit PHP.왘 In Anhang B, »Architekturmuster und Entwurfsmuster«, werden verschiedeneArchitektur- und Entwurfsmuster vorgestellt, die in diesem Buch oder innerhalbvom Zend Framework 3 verwendet werden.왘 In Anhang C, »Unit-Testing mit PHPUnit«, lernen Sie die wichtigsten Grundlagenbeim Einsatz von PHPUnit kennen. Neben der Konfiguration erfahren Sie auchWissenswertes zum Erstellen und Ausführen von Unit-Tests mit PHPUnit.왘 In Anhang D, »Zend Framework 3 und Doctrine«, erfahren Sie, wie Sie Doctrine 2in Ihre ZF3-Anwendungen integrieren können.1.5 Listings und Programmierstil1.4.4 Teil IVAlle Listings werden im gesamten Buch hervorgehoben. Bitte beachten Sie, dass dieTeil IV, »Weitere Themen«, enthält drei Kapitel.meisten DocBlocks für Klassen oder Methoden aus Platzgründen nicht im Buch abge-왘 In Kapitel 17, »Migration vom ZF2 und ZF1«, erfahren Sie alles Wissenswerte zurdruckt werden. Sie finden diese DocBlocks aber im Code der Beispiel- und Übungsan-Migration Ihrer Anwendungen zum Zend Framework 3. Dabei wird sowohl dieMigration vom ZF2 zum ZF3 und vom ZF1 zum ZF3 beleuchtet als auch die Migrationeiner MVC-Anwendung in einer Middleware-Anwendung mit Zend\Expressive.왘 In Kapitel 18, »Webservices und Apigility«, lernen Sie drei Wege kennen, wie Sieeinen RESTful Webservice mit dem Zend Framework 3 implementieren können.Das Kapitel zeigt den Aufbau eines Webservice in einer Zend\Mvc- sowie in einerZend\Expressive-Anwendung. Außerdem wird das Projekt Apigility vorgestellt.왘 In Kapitel 19, »Konsolenanwendungen«, können Sie nachlesen, wie Sie auf Basisder Komponente Zend\Console und des Tools ZF\Console eigene Konsolenanwendungen mit dem Zend Framework 3 umsetzen können. Außerdem erfahren Sie,wie Sie die Komponente Zend\Code für die Codegenerierung einsetzen können.wendungen (siehe Abschnitt 1.8).Da es sich beim überwiegenden Teil der Listings um reine PHP-Listings handelt, wirddas öffnende ?php-Tag nicht extra angeführt (siehe Listing 1.1). Das abschließende? -Tag ist sowieso in der Regel nicht nötig.foreach ( values as key value) {echo key . ' ' . value;}Listing 1.1 Beispiel für ein reines PHP-ListingBei Listings, die sowohl PHP als auch HTML enthalten, werden die öffnenden undschließenden PHP-Tags in der Regel angegeben. Beachten Sie hierbei wie in Listing 1.2auch die alternative Schreibweise der Kontrollstrukturen.1.4.5 Teil VTeil V, »Komponenten«, enthält ein Kapitel.왘 In Kapitel 20, »Zend-Framework-Komponenten«, werden die Zend-Framework-Komponenten kurz vorgestellt, die in diesem Buch eingesetzt werden. Die Einführungen zeigen nur die Grundlagen, tiefere Details vor allem zur Integration inMiddleware- und MVC-Anwendungen bieten die anderen Teile des Buches.40 ?php foreach ( values as key value) : ? ?php echo key; ? ?php echo value; ? ?php endforeach; ? Listing 1.2 Beispiel für gemischtes PHP- und HTML-Listing41

1Einführung in das Zend Framework 3Zeilenlänge in Listings und im BeispielcodeDie Zeilenlänge der Listings im Buch ist auf maximal 75 Zeichen begrenzt und auchdie Listings in den Beispiel- und Übungsanwendungen haben ebenfalls eine Zeilenlänge von höchstens 75 Zeichen, um ein einheitliches Bild zwischen Listings im Buchund dem Code in den Repositorys zu gewährleisten. Details zu den Anwendungenfinden Sie in Abschnitt 1.8.Kommandos, die Sie auf der Konsole (Linux), am Dienstprogramm Terminal (macOS)oder an der Eingabeaufforderung (Windows) ausführen müssen, beginnen immermit einem vorangestellten und sind in der Regel nicht mit einer Listingunterschriftversehen. php --version1.6 Technische VoraussetzungenDie technischen Voraussetzungen für den Einsatz des Zend Frameworks sind überschaubar. Abbildung 1.3 bietet dazu einen Überblick.Abbildung 1.3 Technische Voraussetzungen für das Zend Framework 3In der Regel benötigen Sie neben PHP noch einen Webserver. Sie können dabei aufden internen PHP CLI Server (Command Line Interface, auf Deutsch: Kommandozeile)oder einen »richtigen« Webserver wie Apache 2 oder nginx zurückgreifen. Bei Bedarfbenötigen Sie zusätzlich eine relationale Datenbank wie MySQL oder eine dokumentenorientierte Datenbank wie MongoDB. Außerdem sollten Sie mit Composer und Gitein wenig vertraut sein.42

Kapitel 2Middleware-Anwendungeneinrichten2Middleware ist die Zend-Framework-Antwort auf viele neue leichtgewichtigere PHP-Frameworks, die den etablierten MVC-Frameworksimmer mehr Paroli bieten. Basierend auf der stetig voranschreitendenStandardisierung in der PHP-Welt, bietet der Middleware-Ansatz vomZend Framework 3 eine weitere Alternative für die Umsetzung IhrerAnwendungen.Neben den klassischen Model-View-Controller-Frameworks sind in den letzten Jahren immer mehr neue und leichtgewichtigere PHP-Frameworks aus dem Bodengesprossen. Ein Ansatz, der sich immer mehr durchsetzt und auch vom Zend Framework 3 implementiert wird, ist die sogenannte Middleware.Allgemein gesprochen ist eine Middleware eine Softwarekomponente, die zwei andereSoftwarekomponenten miteinander verbindet. Bezogen auf Webanwendungen imAllgemeinen und auf das Zend Framework 3 im Speziellen, kann sich eine Middlewarezwischen den Request und die Response einer Anfrage an einen Webserver hängen.Zudem kann Middleware auch in einer Pipeline aneinandergekoppelt und nacheinander ausgeführt werden. Basis für die Middleware-Implementation im Zend Framework 3 ist der PSR-7 der PHP FIG (siehe den folgenden Kasten).2.1 Einstieg2.1.1 ProblemstellungIn diesem Kapitel zeige ich Ihnen die Lösung folgender Problemstellung:왘 Auf einer neuen Website Vote My Pizza! sollen Besucher zwei zufällig ausgewähltegegenübergestellte Bilder bewerten und kommentieren können.왘 Wegen der einfachen Struktur dieses Projekts soll dies mit dem neuen Middle-ware-Konzept umgesetzt werden. Dafür soll als Basis eine Middleware SkeletonApplication installiert werden.왘 Sie erfahren alles zum Aufbau einer Zend Framework 3-Middleware-Anwendung.71

2Middleware-Anwendungen einrichten2.12.1.2 PSR-7 und MiddlewareDie PHP FIG stellt eine Reihe von PSRs (PHP Standard Recommendations) bereit, umdie Entwicklung von PHP-Anwendungen zu standardisieren. Der Name bedeutet somit, dass diese Standards nur als unverbindliche Empfehlungen zu verstehen sind.Was ist die PHP FIG, und was bedeutet PSR?Die PHP Framework Interop Group (PHP FIG, http://www.php-fig.org/) hat sich zumZiel gesetzt, für die PHP-Welt Empfehlungen für gemeinsame Standards zu schaffen.Mitglieder der PHP FIG sind unter anderem Vertreter verschiedener PHP-Frameworkswie Aura, CakePHP, Flow, Laravel, Symfony und Zend Framework, von Tools wie Composer, Doctrine oder Phing sowie von Open-Source-Projekten wie Joomla, Neos, SugarCRM oder Drupal.Die Standardempfehlungen der PHP FIG werden PSR (PHP Standard Recommendations) genannt und idealerweise von möglichst vielen Mitgliedern und Nichtmitgliedern unterstützt. Die Implementierung der Standards funktioniert auf freiwilligerBasis, sodass niemand – nicht mal die Mitglieder der PHP FIG – verpflichtet ist, allePSRs in allen Details umzusetzen.Bekannt und bereits weitverbreitet sind die Autoloading-Standards PSR-0 und PSR-4und die Empfehlungen für Code Styles PSR-1 und PSR-2. Weitere Empfehlungen fürStandards sind in Vorbereitung.Eine relativ junge Standardempfehlung ist der PSR-7 (http://www.php-fig.org/psr/psr-7/), die im Mai 2015 akzeptiert worden ist. In diesem Dokument wird eine Reihevon Interfaces zur Darstellung von HTTP-Nachrichten, URIs, Server-Requests undDateiuploads definiert. Vereinfacht gesagt, vereinheitlicht der PSR-7 den Zugriff aufHTTP-Nachrichten auf PHP-Ebene.HTTP-Nachrichten (Requests und Responses) bilden das Gerüst

Das Zend Framework 3 ist gleichermaßen ein PHP-Framework sowie eine Sammlung von Komponenten für den Aufbau vo n Anwendungen auf Basis von PHP. Sie können mit dem ZF3 sowohl klassische Webanwendungen als auch API-Server aufbauen. Zusätzlich bietet das Zend Fr amework 3 auch alle Komponenten für das