Unterschiedliche Konfigurationen für Development & Production Environments in Zend Framework 2

Zend Framework 2 erweist sich als echte Herausforderung, Zend Framework 1 war an manchen stellen ja schon etwas dürftig dokumentiert, aber am ZF2 kann man sich durchaus die Zähne ausbeissen. Ich bastele mir grad eine eigene Boilerplate zusammen, und jedes mal wenn ich denke jetzt gehts, kommt eine neue Beta und alles ist anders. Diesmal habe ich „einfach“ nur versucht, verschiedene Configs für meinen lokalen Webserver (Development) und den Live-Server (Production) besitzen zu wollen. Das habe ich in der Vergangenheit immer genutzt um individuelle Datenbank-Settings und Fehlerberichterstattung zu besitzen. Zend Framework 2 hat an der Stelle extremst rumgezickt (und extremst nicht das gemacht, was überall steht!). Deshalb hier eine kurze Zusammenfassung, die man in meiner GitHub-Repos besser nachvollziehen kann.

Zum ersten die altbekannte Möglichkeit in der .htaccess die Umgebung zu setzen, kommentiert man die Zeile aus, ist das Environment production:

# Set Server Environment
SetEnv APPLICATION_ENV development

Jetzt hat man das fein im Environment stehen, kann PHP aber nichts mit anfangen. Deshalb auch in ./public/index.php die Variable setzen und übernehmen:

// Application Environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV',
              (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')
                                         : 'production'));

Jetzt kann man zwei Konfigurations-Dateien anlegen, die die Production- und die Development-Config wiederspiegeln. Dies geschieht im Verzeichnis ./config/autoload/ und die Dateien heißen development.config.php und production.config.php analog der beiden möglichen Umgebungen. Nun steht an allen Ecken und Kanten im Internet, dass ZF2 jetzt die Dateien automatisch lädt, tuts aber nicht. Nach einigem probieren und fluchen habe ich das Ganze mit dem Holzhammer in der Datei ./config/application.config.php gelöst:

return array(
    'modules' => array(
        'Application',
    ),
    'module_listener_options' => array(
        'config_glob_paths'    => array(
            'config/autoload/{,*.}{global,local}.php',
            'config/autoload/'.APPLICATION_ENV.'.config.php'
        ),
        'module_paths' => array(
            './module',
            './vendor',
        ),
    ),
);

Das System also ziemlich gewalttätig dazu genötigt, eine der beiden Dateien zu laden. Funktioniert so weit, auch wenn es wohl anders gehen sollte (was es nicht tut). Die beiden Dateien machen natürlich auch ein override über die bestehenden Configs / die Modul-Configs -> also aufpassen!

Ähnliche Beiträge

Quickstart Zend Framework Wer mir auf Twitter folgt bekommt eigentlich schon seit Wochen mit, das ich weinend, kreischend und fluchend versuche, dem Zend Framework 2 etwas posi...
Boilerplate fürs Zend Framework Wer meinem Blog fleißig verfolgt weiß ja, das ich viel in Zend Framework mache. Dies liegt wiederum nicht daran, dass ich das so toll finde, sondern d...

2 Antworten auf „Unterschiedliche Konfigurationen für Development & Production Environments in Zend Framework 2“

  1. Es gibt mit Sicherheit auch andere Wege (Datei von der Synchronisation ausschließen zum Beispiel), aber in einem Projekt habe ich in der Regel 3 Installationen (Lokal, Staging, Production) und keine große Lust mir bei der Gelegenheit erst einmal die Finger wund zu konfigurieren! :)

  2. Du bist also so einer der in der Vergangenheit rumstochert. Ich habe auch erstmal vergeblich nach der PROD/DEV einstellung gesucht, allerdings scheint es mir auch nicht so sinvoll den alten weg in das neue zu zwingen.

Schreibe einen Kommentar

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