ZF2 – ein Cookbook

In 3 Schritten einen URL-Shortener mit dem neuen Zend Framework 2 bauen [Schritt 1]
Kommentare

Gute Nachrichten für Zend-Framework-Entwickler und alle, die es werden wollen: Zend Framework ist am 6. September in der Version 2 erschienen. Und wer schon einmal in den Code reingeschaut hat oder einen Blick in die Doku geworfen hat, wird feststellen, dass sich doch einiges seit der ersten Version geändert hat. Grund genug, in einem Cookbook zu beschreiben, wie mit ZF2 losgelegt werden kann.

Natürlich besteht auch die Skeleton-App aus einem Modul, dieses heißt Application. Dieser Name ist prinzipiell frei gewählt, allerdings ist die Bezeichnung als zentraler Einstiegspunkt für eine Applikation auch ganz passend. Ein entsprechendes Verzeichnis finden wir im modules-Ordner der Skeleton-App. Die Grundidee eines Moduls ist dessen Autarkie. Im Wesentlichen sollte es möglich sein, ein Modul in jeder anderen Applikation unverändert nutzen zu können.

Besagtes Modul Application wird geladen, da in der Applikationskonfiguration config/application.php ein Eintrag modules‘ => array(‚Application‘) zu finden ist.

Module

„Zend Framework 2.0 introduces a new and powerful approach to modules. This new module system is designed with flexibility, simplicity, and re-usability in mind. A module may contain just about anything: PHP code, including MVC functionality; library code; view scripts; and/or public assets such as images, CSS, and JavaScript. The possibilities are endless.“ [3]

Gerade die einfache Wiederverendung ist ein riesiger Vorteil von Modulen. Unter [4] finden sich schon einige nützliche Module zur Verwendung in der eigenen Applikation, z. B. eine Userverwaltung oder Doctrine-Verknüpfung.

Jedes Modul hat einen zentralen Einstiegspunkt: Module.php. Vergleichbar ist diese Datei vielleicht mit der Bootstrap.php aus ZF1 – allerdings ist die interne Verwendung doch grundverschieden. In der Datei Module.php wird eine Klasse ApplicationModule definiert. Diese Klasse hat eine Methode getConfig(), die, nun ja, ein Konfigurations-Array zurückgibt. Diese Methode wird automatisch von der internen MVC-Implementierung aufgerufen. In der Regel wird ein eigenes Konfigurationsfile erstellt. Hier ist es config/module.config.php. Analog zur Applikationskonfiguration wird auch in dieser Datei lediglich ein assoziatives Array zurückgegeben. Werfen wir einen kurzen Blick in die Konfiguration: Am Anfang mag die Konfiguration sehr komplex erscheinen, das ist alles halb so wild. Im Laufe des Artikels wird noch Licht ins Dunkle gebracht. Kurz reingeschaut sehen wir aber solche Sachen wie Routing, Controller Definition, die View, einen Translator und manches mehr. Das lässt schon erahnen, dass das ZF2 sehr viel an Flexibilität dazugewonnen hat, wenn auch etwas mehr Konfigurationsaufwand notwendig geworden ist.

Zurück zur Klasse ModuleApplication. Da Module so aufgebaut werden, dass sie selbstständig arbeiten können, kann und sollte ein eigener Autoloader bzw. dessen Konfiguration implementiert werden. Dies geschieht in der Methode getAutoloaderConfig():

return array(
    'ZendLoaderStandardAutoloader' => array(
        'namespaces' => array(
            __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
        ),
    ),
);

Der hier definierte Autolader ist ein so genannter StandardAutoloader, der über den Namespace definiert wird – in diesem Fall ist der Namespace Application. Dieser Namespace wird auch als interner Bezeichner für den Autoloader genutzt, deshalb der Array-Key __NAMESPACE__. Der Value bezeichnet den Basispfad für alle Dateien, die über den Autoloader gefunden werden sollen. Die Verwendung von __DIR__ stellt sicher, dass, egal wo dieses Modul eingesetzt wird, der korrekte, absolute Pfad zum Modul genutzt wird. Der Ordnername src ist – wie man an der Definition sieht – frei gewählt, hat sich aber auch als Best Practice herausgestellt. In dem besagten Ordner src bzw. src/Application (oder auch ’src/‘ . __NAMESPACE__) spielt sich das eigentliche Leben des Moduls ab. Hier befinden sich z. B. die Controller und die Models. Der Ordnername Application mag zu Anfang ungewöhnlich erscheinen, da wir uns ja im Modul Application befinden, ist aber dem einfacheren Umgang mit dem Namespace und den Autoloadern geschuldet. Andererseits spricht nichts dagegen, Application umzubenennen oder weitere Verzeichnisse in den src-Ordner zu stecken, eine entsprechende Konfiguration der Autoloader vorausgesetzt.

Die Controller wurden weiter oben bereits erwähnt. Diese kommen auch dem ZF1-Entwickler sehr bekannt vor. Der Controller hat weiterhin diverse action-Methoden, und die Views sind im Wesentlichen phtml-Dateien. Auch die Ordnerstruktur der View Templates ist analog zum dem aus ZF1, allerdings nicht (standardmäßig) im src-Ordner, sondern in einem eigenen Verzeichnis view auf gleicher Ebene wir src. Die Organisation der View Templates ist analog der aus ZF1, sprich view///.phtml. Hierbei ist – wie auch im ZF1 – unbedingt darauf zu achten, dass der Pfad inklusive und komplett klein geschrieben wird.

Modul Zhorty

Jetzt wird es Zeit, das eigene Modul Zhorty zu entwickeln. Los geht’s mit einem neuen Verzeichnis module/Zhorty. Darin erstellen wir Verzeichnisse config, src und view. Des Weiteren wird die Basisdatei Module.php mit der Klasse Zhorty/Module benötigt, die die Module-Konfiguration ausliest (Listing 1).

Listing 1

<?php namespace Zhorty;

class Module
{
    public function getConfig()
    {
        return include __DIR__ . '/config/module.config.php';
    }
}

Die Konfiguration selbst, also die Datei config/module.config.php, sollte erstellt werden, kann zu Beginn aber einfach ein leeres Array zurückgeben:

<?php return array();

Jetzt geht es schon ans Eingemachte: Unser erster Controller ZhortyTrimController kommt in die Datei src/Zhorty/Controller/TrimController.php (Listing 2).

Listing 2

<?php namespace ZhortyController;

use ZendMvcControllerAbstractActionController;
use ZendViewModelViewModel;

class TrimController extends AbstractActionController
{
    public function indexAction()
    {
        return new ViewModel();
    }
}
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -