5.3 Integration der Komponente 

Die Configuration-Komponente wird im Konstruktor des Haupt-Controllers initialisiert, der zentralen Klasse des GP-Blogs, womit sichergestellt ist, dass die Einstellungen der Anwendung von da an der ganzen Applikation zur Verfügung stehen.
protected function __construct()
{
$this->actionSignals = new ezcSignalCollection();
$this->mainSignals = new ezcSignalCollection();
$cfg = ezcConfigurationManager::getInstance();
$cfg->init(
'ezcConfigurationIniReader',
dirname( __FILE__ ) . '/../config/'
);
}Listing 5.1 Konfiguration initialisieren
Auch die Klasse ezcConfigurationManager implementiert das Singleton-Entwurfsmuster, welches Ihnen schon öfter in diesem Buch begegnet ist (zum Beispiel in Abschnitt 2.3.4, »Lazy-Initialization«). Diese Implementierung des Singleton-Patterns stellt sicher, dass nur eine Instanz des Konfigurationsmanagers existiert. Außerdem ist so der Zugriff auf Konfigurationswerte überall im GP-Blog automatisch gewährleistet.
Die erste Aktion besteht nun darin, die Singleton-Instanz von ezcConfigurationManager zu initialisieren. Dafür werden dieser die Art derjenigen Konfigurationsdateien übergeben, die gelesen werden sollen, sowie das Verzeichnis, in dem die Dateien zu finden sind. Die Übergabe des Klassennamens des zu benutzenden ezcConfigurationReaders stellt die leichte Erweiterbarkeit sicher, da Sie hier auch eigene Implementierungen dieser Basisklassen erstellen können. Das Verzeichnis mit den Konfigurationsdateien befindet sich im Hauptverzeichnis der Applikation, sodass es relativ zum Pfad der Controller-Klassendatei referenziert wird. Aus diesem Verzeichnis werden von nun an beim Zugriff auf alle Einstellungen die Konfigurationsdateien gelesen.
5.3.1 Basiseinstellungen 

In einer zentralen Konfigurationsdatei liegen die Einstellungen der Applikation. Dazu gehören der Name des Autors, der Titel des Blogs und benötigte Einstellungen der Url-Komponente aus Kapitel 3, »Die Applikationsbasis«, sowie die Datenbankverbindungsdaten, die später in Kapitel 6, »Datenbankanbindung«, verwendet werden.
# General site settings [general] name=John Doe title=Some random thoughts # Installation specific settings [installation] # Host running the blog. Leave empty for auto detection. # host=galileo # Path to blog basedir=/ # Scriptname of blog index file script=index.php # Database Source Name # extension://user:password@host/database dsn=mysql://user:passwort@localhost/gpblog
Listing 5.2 Konfigurationsdatei site.ini
Die Konfigurationsdatei besteht aus drei Sektionen, in die die Einstellungen einsortiert wurden. Sämtliche Einstellungen müssen in Sektionen gegliedert werden, deren Namen Leerzeichen, Buchstaben und Zahlen enthalten können. Die genaue Spezifikation der Grammatik von ini-Konfigurationsdateien finden Sie in der Dokumentation [http://ezcomponents.org/docs/api/latest/introduction_Configuration.html#ini-file-format ] als EBNF, sie orientiert sich aber an dem gewohnten Format – wie es beispielsweise in der Datei php.ini zu finden ist –, mit der zusätzlichen Eigenschaft, dass Kommentare neben ; auch mit # eingeleitet werden können. Konfigurationswerte dürfen auch Leerzeichen und Sonderzeichen enthalten, selbst wenn sie nicht in Anführungszeichen gefasst werden.
Die Einstellungen aus der gezeigten Datei site.ini werden in der Methode run() des Haupt-Controllers, der bereits aus Abschnitt 3.3, »Der Haupt-Controller«, bekannt ist, wie folgt verwendet:
$urlConfig->basedir = ezcConfigurationManager::getInstance()
->getSetting( 'site', 'installation', 'basedir' );
$urlConfig->script = ezcConfigurationManager::getInstance()
->getSetting( 'site', 'installation', 'script' );
if ( ezcConfigurationManager::getInstance()->
hasSetting( 'site', 'installation', 'host' ) )
{
$host = ezcConfigurationManager::getInstance()->
getSetting( 'site', 'installation', 'host' );
}
else
{
$host = $_SERVER['SERVER_NAME'];
}Listing 5.3 Konfigurationswerte auslesen
Die Url-Komponente parst die URL, mit der das GP-Blog aufgerufen worden ist. Um das Applikations-Setup flexibel zu gestalten, wird die Url-Komponente mit dem Ordner, in dem die Applikation liegt, und dem Namen der Basisdatei konfiguriert. Bislang kamen diese Informationen aus PHP-Konstanten in der Datei index.php, doch sollten auch diese durch die Konfigurationskomponente ersetzt werden.
In den ersten beiden Zeilen des Beispiels wird jeweils ein Konfigurationswert ausgelesen und der Url-Komponente übergeben. Dazu wird die Methode getSetting() auf dem Konfigurationsmanager aufgerufen, welchem drei Parameter übergeben werden: Der erste Parameter spezifiziert die Konfigurationsdatei, in der die Einstellung zu finden ist, der zweite und dritte die Sektion und den eigentlichen Schlüssel des gewünschten Werts.
Der Dateiname wird beim Lesen von Konfigurationseinstellungen mit angegeben, weil der Konfigurationsmanager zahlreiche Konfigurationsdateien verarbeiten kann und so die Einstellungen in verschiedene Dateien ausgelagert werden können. Diese Option sorgt sowohl für eine logische Trennung der Einstellungen in der Applikation als auch für einen einfacheren, da strukturierteren, Zugriff durch den Anwender. Außerdem kümmert sich der entsprechender Reader um das Anhängen der passenden Dateiendung, sodass Sie völlig unabhängig vom verwendeten Konfigurationsformat entwickeln können.
Zuletzt wird die in der Konfigurationsdatei durch den Kommentar als optional deklarierte Einstellung host abgefragt. Abhängig davon, ob diese gesetzt ist, wird sie entweder verwendet oder es wird auf die super-globale Variable $_SERVER['SERVER_NAME'] zugegriffen.
5.3.2 Komplexe Indizes 

In Kapitel 3, »Die Applikationsbasis«, wurde die Liste der Action-Controller, welche ihre Dispatching-Regeln in der SignalSlot-Komponente registrieren, über eine eigene Autoload-Datei definiert. Um die Liste dieser Klassen in Zukunft einfacher erweitern zu können, wird sie ebenfalls in eine eigene Konfigurationsdatei ausgelagert.
# Classes containing actions to register for dispatcher [classes] action[]=gpBlogActionEntryDisplay action[]=gpBlogActionEntryEdit action[]=gpBlogActionError # Default action [default] action=list_entries
Listing 5.4 Konfigurationsdatei actions.ini
Neben der gewohnten Schreibweise von Konfigurationsschlüsseln in der letzten Zeile zeigen die vorhergehenden Zeilen eine Besonderheit: Hinter dem Namen der Schlüssel sind eckige Klammern angehängt, um einem Konfigurationsschlüssel eine Liste von Werten zuzuweisen. Intuitiv erinnert dies an die PHP-Array-Semantik. Und tatsächlich wird diese Liste in der Applikation durch ein Array repräsentiert.
Die Configuration-Komponente unterstützt nicht nur numerische, sondern auch Zeichenketten-Indizes, sowie multidimensionale Arrays, indem – wie in PHP – mehrere eckige Klammern verwendet werden. So lässt sich ein Schlüssel wie user[kore][email][] verwenden um einem Benutzer über eine Konfigurationsdatei mehrere E-Mail-Adressen zuzuordnen. In der Applikation lassen sich diese (genau wie die Skalare im letzten Beispiel) über getSetting() auslesen.
foreach( ezcConfigurationManager::getInstance()->
getSetting( 'actions', 'classes', 'action' ) as
$actionClass )
{
call_user_func(
array( $actionClass, "registerSlots" ),
$this->mainSignals,
$this->actionSignals
);
}Listing 5.5 Initialisierung der Aktionen aus der Konfigurationsdatei
In diesem Beispiel wird der Schlüssel action der Sektion classes aus der Konfigurationsdatei actions gelesen und direkt in der foreach-Schleife verwendet, um die Signale der Action-Controller zu registrieren.




Ihre Meinung






