© saicle/Shutterstock.com
Ein Überblick über den ServiceManager vom Zend Framework 2

Stets zu Diensten


In diesem Artikel erfahren Sie zuerst einige grundlegende Informationen zum Einsatz des ServiceManagers und möglichen Fallstricken. Der Artikel zeigt auf, welche spezialisierten ServiceManager es gibt und wie Sie diese gewinnbringend einsetzen können. Zudem wird erläutert, wie hilfreich Initializer sein können und warum Sie den Einsatz vom „berüchtigten“ ServiceLocatorAwareInterface eher vermeiden sollten.

Die Komponente Zend\ServiceManager hat im Zend Framework 2 die alte statische Zend_Registry vollkommen ersetzt. Der ServiceManager ermöglicht dem Entwickler, die Konfiguration und Initialisierung seiner Objekte und Services an einem zentralen Ort zu bündeln. Das erleichtert die Wiederverwendung und hilft bei der Strukturierung der eigenen Anwendung.

ZF2-Beispielanwendung

Damit Sie die Beispiele selbst nachvollziehen können, steht eine Beispielanwendung auf GitHub für Sie bereit [1]. Sie können das Projekt wie folgt klonen (bitte ggf. die Verzeichnisse anpassen) und installieren:

> cd /home/devhost > git clone https://github.com/RalfEggert/phpmagazin.service-manager > cd phpmagazin.service-manager > php composer.phar selfupdate > php composer.phar install > sudo chmod 777 -R data/ 

Danach richten Sie noch einen Virtual Host für die Adresse phpmagazin.service-manager ein. Wenn Sie nun http://phpmagazin.service-manager/ in Ihrem Browser aufrufen, sollte die Seite ungefähr wie in Abbildung 1 aussehen. Nun können wir loslegen.

eggert_zf2_1.tif_fmt1.jpgAbb. 1: Beispielanwendung im ZF2

Zuerst etwas Theorie

Die Zend\ServiceManager-Komponente [2] implementiert das ServiceLocator-Entwurfsmuster, das unter anderem auch von Martin Fowler beschrieben wurde [3]. Der ServiceLocator hat die Aufgabe (ähnlich wie eine Registry), alle benötigten Objekte (Services) bereitzustellen. Während eine Registry diese Objekte zuerst übergeben bekommen muss, um sie dann für die spätere Verwendung bereitzuhalten, kümmert sich der ServiceLocator auch um die Instanziierung dieser Objekte. Der ServiceLocator hält somit nicht nur die instanziierten Objekte, sondern auch das Wissen bereit, wie ein Objekt zu instanziieren ist. Erst wenn diese Objekte wirklich gebraucht werden, werden diese erzeugt.

Der ServiceManager ist dabei in der Lage, sowohl Klassen ohne Abhängigkeiten direkt zu instanziieren (die so genannten Invokables) als auch Klassen mit Abhängigkeiten mithilfe von Factories zu generieren. Zusätzlich werden abstrakte Fabriken und Initializer unterstützt, sie können für jeden Service definieren, ob diese...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang