Contao in verschiedenen Systemumgebungen

Wer in Contao eine Erweiterung programmiert macht das in der Regel auf einem lokalen Rechner. Sobald die Erweiterung einen halbwegs stabilen Stand erreicht hat, kann diese bereits auf einem Testsystem geprüft werden (ggf. auch durch externe Tester). Anschließend wird die Extension auf dem Live-System in Betrieb genommen. Die Extension hat somit verschiedene Umgebung durchlaufen: Development, Testing und Live. Um Contao in diesen Umgebungen zu betreiben hat sich für mich folgendes Vorgehen ergeben:

In der Datei system/config/initconfig.php wird auf eine eigene config.php verwiesen. Ich erstelle dazu in Root-Verzeichnis von Contao ein Verzeichnis mit dem Namen app. Darin wird vorerst eine leere config.php erstellt. In der initconfig.php wird auf diese Datei verwiesen.

/**
 * Here you can add custom initialization routines that are executed
 * on every back end and front end request.
 */
require_once(dirname(__FILE__).'/../../app/config.php');

Wer mit SVN arbeitet, sollte die app/config.php in svn:ignore aufnehmen und eine config.php.dist einspielen. In der eigenen config.php wird nun abhängig von der aktuellen Umgebung weitere PHP Dateien inkludiert. Das kann z. B. folgendermaßen aussehen:

<?php 
// possible enviroments: development, testing, live
define('MY_ENVIROMENT', 'development');
 
require_once(dirname(__FILE__).'/environment/'.MY_ENVIROMENT.'.php');
?>

Dem aufmerksamen Leser fällt sofort auf, dass wir bisher immer mit require bzw. require_once zum Einbinden der Dateien gearbeitet haben, d. h. sollte eine dieser Dateien nicht existieren, würde PHP einen E_COMPILE_ERROR Fehler melden. In diesem Fall ist das explizit erwünscht. Der Ordner /app/config/enviroment beinhaltet schließlich die Dateien development.php, testing.php und live.php (die im Idealfall unter Versionskontrolle stehen sollten). Eine dieser Dateien sieht z. B. folgendermaßen aus:

<?php
// contao settings
$GLOBALS['TL_CONFIG']['dbHost'] = 'localhost';
$GLOBALS['TL_CONFIG']['dbUser'] = 'my_local_user';
$GLOBALS['TL_CONFIG']['dbPass'] = 'my_local_password';
$GLOBALS['TL_CONFIG']['dbDatabase'] = 'my_local_database';
$GLOBALS['TL_CONFIG']['adminEmail'] = 'mail@mailinator.com';
$GLOBALS['TL_CONFIG']['websitePath'] = '';
// ...
?>

Auf der jeweiligen Umgebung muß lediglich die eigene Konfigurationsdatei angepasst werden und das Projekt müßte zur Einrichtung vorbereitet sein.

Kommentar verfassen