Blog

Entwickler-Namensräume für ZF2 Module

1. Mai 2014

In dem beliebten und mächtigen PHP-Framework für Unternehmensanwendungen Zend Framework 2 (kurz ZF2) dreht sich alles um sogenannte Module. Das sind gekapselte Pakete mit Code für klar definierte Aufgabenbereiche. Jeglicher Programmcode, der in einer reinen ZF2-Anwendung geschrieben wird, kommt in ein solches Modul. Das gilt sowohl für eigene Entwicklungen, als auch für Module von Drittanbietern, welche man dann einfach nur einbinden muss.

Beispielsweise kann man die Darstellung der eigenen Internetseite in ein Modul packen (nennen wir es Frontend), die Benutzerverwaltung mit Login/Logout in ein Separates (z.B. User) und die Administration von alledem in das Modul Backend.

Das System dahinter basiert auf den nativen PHP-Namensräumen (engl. Namespaces). Jedes Modul und jede Klasse darin befindet sich dann unter dem gleichen Namensraum.

Entwickelt man ausschließlich eigene Module, gibt es kaum Anlass zur Sorge und man kann seine Module i.d.R. beliebig benennen. Ärger gibt es dann, wenn man Module mit anderen Entwicklern tauscht, eigene Module im Internet anbietet oder Module von Dritten einbinden möchte. Dann ist nämlich nicht mehr sichergestellt, dass jedes Modul einen eigenen Namen hat und es kann passieren, dass sich zwei Module verschiedener Entwickler den gleichen Namensraum teilen – und das geht schief.

Entwickler-Namensräume

Das alles ist natürlich nicht neu und schon von Anfang an wurde empfohlen, eigene Module mit einem Hersteller-Präfix zu versehen, also z.B.

namespace EpUser; // Statt nur User

Das funktioniert ganz gut, sauberer und mehr im Sinne der Namensräume wäre aber folgende Variante:

namespace Ep/User;

Damit können auch auf Verzeichnis-Ebene Module des gleichen Entwicklers zusammengefasst werden.

Mit Veröffentlichung der Version 2.3.0 wurde die Unterstützung letzterer Variante soweit verbessert, dass sich bei neuen Projekten die neue Konvention einzusetzen lohnt.

Die Module erhalten dann wie oben beschrieben den Namensraum entsprechend:

namespace Ep/User;
namespace Ep/User/Controller;
namespace Ep/User/Controller/Plugin;
...

Auf Verzeichnis-Ebene muss das natürlich widergespiegelt werden:

module/Ep/User/Module.php
module/Ep/User/src/...
...

Letztlich muss das Modul noch in der Konfiguration mitsamt Namensraum registriert werden:

return array(
    'modules' => array(
        'EpUser',
    ),
    ...

Fertig!

Bitte lesen Sie unsere Hinweise zum Datenschutz bevor Sie diese Buttons nutzen