Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort des Fachgutachters
Vorwort
1 Einleitung
2 Einführung in eZ Components
3 Die Applikationsbasis
4 Fehlerbehandlung und Debugging
5 Konfiguration
6 Datenbankanbindung
7 ORM mit PersistentObject
8 Template
9 Übersetzung
10 Benutzereingaben validieren
11 Authentifizierung
12 Bildverarbeitung
13 Archive und Dateien
14 Mail
15 Logging
16 Diagramme
17 Feeds und Caching
18 Setup
A Inhalt der Buch-CD
Stichwort

Download:
- ZIP, ca. 2,7 MB
Ihre Meinung?

Spacer
<< zurück
eZ Components von Tobias Schlitt, Kore Nordmann
Das Entwickler-Handbuch
Buch: eZ Components

eZ Components
geb., mit CD
454 S., 39,90 Euro
Galileo Computing
ISBN 978-3-8362-1073-7
Pfeil 5 Konfiguration
Pfeil 5.1 Nutzen in der Applikation
Pfeil 5.2 Die Configuration-Komponente
Pfeil 5.3 Integration der Komponente
Pfeil 5.3.1 Basiseinstellungen
Pfeil 5.3.2 Komplexe Indizes
Pfeil 5.4 Direkter Zugriff
Pfeil 5.4.1 Änderungen speichern
Pfeil 5.4.2 Schnellerer Zugriff durch PHP-Arrays
Pfeil 5.4.3 Lazy-Initialization
Pfeil 5.5 Fazit


Galileo Computing - Zum Seitenanfang

5.4 Direkter Zugriff Zur nächsten ÜberschriftZur vorigen Überschrift

In den Beispielen des letzten Abschnitts wurde der ezcConfigurationManager zum Zugriff auf die Einstellungen verwendet. Dies macht in Applikationen gewöhnlich auch Sinn, da die Konfigurationsdateien syntaktisch korrekt sind und man lediglich einen zentralen Zugriffsmechanismus auf eine Menge von Konfigurationsdateien benötigt.

Dem Konfigurationsmanager wurde beim Instanziieren der Name einer Reader-Klasse übergeben, die er verwenden soll, um auf Konfigurationsdateien zuzugreifen. Diese Reader-Klassen, die, wie der Name schon impliziert, verwendet werden, um die Konfigurationsdateien zu lesen, können auch direkt instanziiert und verwendet werden. Im Unterschied zum ezcConfigurationManager erlaubt die direkte Verwendung von Reader-Klassen Ihnen zum Beispiel die Validierung des unterstützten Formats.

$reader = new ezcConfigurationIniReader( 'site.ini' );
$result = $reader->validate();
foreach ( $result->getResultList() as $item )
{
    printf( "In '%s' on line '%d', position: ''%d': %s\n",
        $item->file, $item->line, $item->column, $item->details
    );
}
$cfg = $reader->getConfig();
echo $cfg->getSetting( 'general', 'title' );

Listing 5.6 Überprüfung auf Validität

Dieser Beispielcode validiert die Konfigurationsdatei site.ini und zeigt eventuelle Fehler wie Leerzeichen in einem Konfigurationsschlüssel an. Dabei wird in der ersten Zeile der ezcConfigurationIniReader mit dem Pfad der zu ladenden Datei instanziiert.

Anschließend wird die Methode validate() des ezcConfigurationIniReaders aufgerufen, welche die Konfigurationsdatei auf syntaktische Fehler hin überprüft. Die Methode gibt ein Objekt der Klasse ezcConfigurationValidationResult zurück, das Informationen über die Validierung enthält. Falls keine Fehler beim Validieren der Datei auftreten, enthält das Attribut $isValid den Wert true zurück. Andernfalls können die aufgetretenen Fehler über die Methode getResultList() abgefragt werden, die einen Array von ezcConfigurationValidationItem-Instanzen zurückgibt. Da die Fehlerliste leer ist, wenn kein Fehler auftrat, verzichtet das Beispiel auf die Prüfung der Eigenschaft $isValid.

Wie in der foreach-Schleife im Beispiel gezeigt, enthält jedes ezcConfigurationValidationItem sowohl Informationen zur Postion des Fehlers in der Konfigurationsdatei als auch eine für den Anwender lesbare Fehlermeldung in der Eigenschaft $details.

Nachdem sichergestellt ist, dass die Konfigurationsdatei validiert, kann auf die Werte zugegriffen werden. Dazu gibt $reader->getConfig() ein ezcConfiguration-Objekt zurück, aus dem Sie die Einstellungen direkt per getSetting() beziehen können. getSetting() akzeptiert, anders als die gleichlautende Methode auf dem ezcConfigurationManager, natürlich nur zwei Parameter, da die Angabe einer Datei in diesem Fall überflüssig ist.


Galileo Computing - Zum Seitenanfang

5.4.1 Änderungen speichern Zur nächsten ÜberschriftZur vorigen Überschrift

Neben den Reader-Klassen stellt die Configuration-Komponente auch Writer-Klassen für die vorhandenen Backends bereit. Zusammengenommen lässt sich damit einfach ein Frontend zur Verwaltung der Konfigurationsdateien schreiben, indem bestehende Konfigurationsdateien geladen, verifiziert und anschließend wieder gespeichert werden können.

$writer = new ezcConfigurationIniWriter();
$writer->init( 'path/', 'site', $cfg );
$writer->save();

Listing 5.7 Änderungen in Konfigurationsdatei speichern

Die Writer-Klasse lässt sich genauso instanziieren, wie es auch für die reader-Klasse angesprochen wurde, und akzeptiert als dritten zusätzlichen Parameter ein ezcConfiguration-Objekt, das gespeichert werden soll. Durch einen Aufruf von save() wird die Konfiguration im ini-Format in die spezifizierte Datei geschrieben, wobei Kommentare und Leerzeilen nicht verlorengehen.


Galileo Computing - Zum Seitenanfang

5.4.2 Schnellerer Zugriff durch PHP-Arrays Zur nächsten ÜberschriftZur vorigen Überschrift

Wie zu Beginn des Kapitels erwähnt, erlaubt es die Configuration-Komponente, mehrere Backends und Konfigurationsdateien in verschiedenen Formaten zu speichern. Sie können sehr einfach eigene Backend-Klassen entwickeln und ezcConfiguration damit um weitere Konfigurationsformate erweitern. Im Paket befinden sich neben dem ezcConfigurationIniReader und dem ezcConfigurationIniWriter auch Klassen, um Konfigurationen als mehrdimensionales PHP-Array direkt in Dateien zu speichern und sich so die Vorteile des schnellen PHP-Interpreters und optionaler Op-Code-Caches zunutze zu machen. Die API, um auf solche Konfigurationsdateien zuzugreifen, ist die gleiche wie für ini-Dateien. ezcConfiguration kann natürlich auch Konvertierungen zwischen den Formaten durchführen, da alle Backends von den abstrakten Klassen ezcConfigurationReader und ezcConfigurationWriter ableiten und intern die gleichen Datenstrukturen verwenden.


Op-Code-Cache

Programmiersprachen werden von einem Compiler zunächst in sogenannten Op-Code (Operation-Code) übersetzt, der bei Sprachen ohne virtuelle Maschine häufig direkt Maschinenbefehlen des Prozessors entspricht. Bei PHP sind Op-Codes Befehle, die durch die Zend-Engine, die die virtuelle Maschine von PHP implementiert, ausgeführt werden. Ein Op-Code-Cache wie zum Beispiel APC [http://pecl.php.net/APC] speichert die Op-Codes eines kompilierten PHP-Skripts, um den Vorgang des Kompilierens beim nächsten Aufruf des Skripts zu sparen.


$reader = new ezcConfigurationIniReader( 'actions.ini' );
$cfg = $reader->getConfig();

$writer = new ezcConfigurationArrayWriter();
$writer->init( 'cached/', 'actions', $cfg );
$writer->save();

Listing 5.8 Cachen der Konfiguration in PHP-Dateien

In den ersten beiden Zeilen wird eine ini-Datei geladen und die darin enthaltenen Konfigurationswerte werden ausgelesen. In den darauf folgenden drei Zeilen, die bis auf die instanziierte Writer-Klasse äquivalent zum vorhergehenden Beispiel des Schreibens einer ini-Datei sind, werden die Informationen aus der ini-Datei in einer PHP-Datei gespeichert. Diese generierte PHP-Datei enthält ein mehrdimensionales Array mit den Konfigurationswerten, das aus der Datei zurückgegeben wird:

return array (
  'settings' =>
  array (
    'classes' =>
    array (
      'action' =>
      array (
        0 => 'gpBlogActionEntryDisplay',
        1 => 'gpBlogActionEntryDelete',
        2 => 'gpBlogActionEntryEdit',
        3 => 'gpBlogActionError',
      ),
    ),
  ),
  'comments' =>
  array (
    'classes' =>
    array (
      '#' => ' Classes containing actions to register for
           dispatcher',
    ),
  ),
);

Listing 5.9 Generierter PHP-Code

Wie das Beispiel zeigt, gehen mit dem Array-Writer auch die Kommentare zu einzelnen Konfigurationsschlüsseln nicht verloren, sondern bleiben wie gewohnt erhalten.


Galileo Computing - Zum Seitenanfang

5.4.3 Lazy-Initialization topZur vorigen Überschrift

Auch die Configuration-Komponente unterstützt das Konzept der Lazy-Initialization, die Initialisierung und Konfiguration beim ersten wirklichen Gebrauch (siehe auch Abschnitt 2.3.4, »Lazy-Initialization«).

class customLazyConfigurationConfiguration
{
    public static function configureObject( $cfg )
    {
        $cfg->init( 'ezcConfigurationIniReader',
            dirname( __FILE__ ) . '/../config' );
    }
}

Listing 5.10 Lazy-Initialization der Configuration-Komponente

Die Klasse customLazyConfigurationConfiguration übernimmt die Konfiguration von ezcConfigurationManager, wenn dessen Instanz zum ersten Mal angefragt wird. In diesem Moment wird die Methode configureObject() aus der Lazy-Initialization-Klasse mit der Instanz des Managers aufgerufen. In Zeile fünf wird entsprechend das Basisverzeichnis der Konfigurationsdateien gesetzt.

ezcBaseInit::setCallback(
    'ezcInitConfigurationManager',
    'customLazyConfigurationConfiguration'
);

Listing 5.11 Callback definieren

Mit der Methode ezcBaseInit::setCallback() wird mit dem Schlüsselwort, das die Configuration-Komponente identifiziert (ezcInitConfigurationManager), diejenige Klasse assoziiert, die der Lazy-Initialization-Mechanismus zur Konfiguration verwenden soll.

// Classes loaded and configured on first request
$author = ezcConfigurationManager::getInstance()
    ->getSetting( 'site', 'general', 'name' );
echo "Autor des Blogs: '{$author}'.\n";

Listing 5.12 Lazy-Initialization nutzen

Wenn nun im GP-Blog das erste Mal auf den Konfigurationsmanager zugegriffen wird, um Werte aus einer Konfigurationsdatei zu lesen, wird das neu erzeugte Manager-Objekt über die von Ihnen definierte Klasse konfiguriert. Das erwartete Ergebnis, die Ausgabe des Blog-Besitzer-Namens, wird damit erzielt. Sollte innerhalb eines Requests kein Zugriff auf Werte aus den Konfigurationsdateien benötigt werden, wird die Komponente entsprechend auch nicht initialisiert und konfiguriert.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
<< zurück
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: PHP 5.3 und MySQL 5.1






 PHP 5.3 und
 MySQL 5.1


Zum Katalog: Besser PHP programmieren






 Besser PHP
 programmieren


Zum Katalog: Webshops mit Magento






 Webshops mit
 Magento


Zum Katalog: Sichere Webanwendungen






 Sichere
 Webanwendungen


Zum Katalog: PHP 5.3 und MySQL 5.1 - Videotraining






 PHP 5.3 und
 MySQL 5.1 -
 Videotraining


Zum Katalog: Apache 2






 Apache 2


Zum Katalog: Suchmaschinen-Optimierung für Webentwickler






 Suchmaschinen-
 Optimierung
 für Webentwickler


Zum Katalog: Joomla! 1.5






 Joomla! 1.5


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de