Zugriff auf die Konfiguration

zf2-logo konfiguration Die Konfiguration im Zend Framework 2 zu füllen, ist nicht schwierig. Wie aber kann man auf die Konfiguration zugreifen?

Quick and dirty geht das ganz einfach:

namespace MyModule;

class Module
{
    public function getConfig()
    {
        return array(
            'my-module' => array(
                'foo' => 'bar'
            )
        );
    }
}
// Zugriff z.B. im Controller:
$config = $this->getServiceLocator()->get('Config');
echo $config['my-module']['foo']; // gibt 'bar' aus

Das funktioniert, ist aber nicht wirklich schön. Spätestens wenn man sein Modul auch anderen zugänglich machen will, müssen die sich auf die Suche nach unseren Konfigurationsmöglichkeiten machen. Wir können natürlich eine Dokumentation mit allen Möglichkeiten anlegen, aber eine Dokumentation zu schreiben macht nicht wirklich Spaß und wenn Dokumentation und Quelltext getrennt voneinander liegen, veraltet die Dokumentation schneller als man glaubt.

Wir brauchen also eine sauberer Lösung, um auf unsere Konfiguration zuzugreifen. Es bietet sich an, die Konfiguration in einem Objekt zu kapseln. Das könnte z.B. so aussehen:

namespace MyModule\Options;

use Zend\Stdlib\AbstractOptions;

class ModuleOptions extends AbstractOptions
{
    protected $foo;

    public function setFoo($value)
    {
        $this->foo = $value;
    }

    public function getFoo()
    {
        return $foo;
    }
}

Wir haben hier eine einfache Klasse, die eine Getter- und eine Setter-Methode für foo besitzt. Warum erweitern wir dafür Zend\Stdlib\AbstractOptions? Dort ist ein Konstruktor definiert, der es uns ermöglicht, die Optionen als Array zu übergeben und so direkt zu setzen. Das sieht dann ungefähr so aus:

namespace MyModule;

use MyModule\Options\ModuleOptions;
use Zend\ServiceManager\ServiceLocatorInterface as ServiceLocator;

class Module
{
    public function getConfig()
    {
        return array(
            'my-module' => array(
                'foo' => 'bar'
            )
        );
    }

    public function getServiceConfig()
    {
        return array(
            'factories' => array(
                'MyModule\Options\ModuleOptions' => function (ServiceLocator $services) {
                    $config = $services->get('Config');
                    return new ModuleOptions($config['my-module']);
                }
            )
        );
    }
}
// Zugriff z.B. im Controller:
$config = $this->getServiceLocator()->get('MyModule\Options\ModuleOptions');
echo $config->getFoo(); // gibt 'bar' aus

Wie ihr seht, haben wir durch diese paar Zeilen mehr einen sauber definierten Zugriff und einen zentralen Punkt im Code, wo sämtliche Konfigurationsmöglichkeiten für unser Modul dokumentiert sind und wo wir Standard-Werte setzen können. Das allein sollten euch diese paar Zeilen Code wert sein 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *