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?
<< zurück | Galileo Computing / <openbook> /eZ Components | vor >>
eZ Components von Tobias Schlitt, Kore Nordmann Das Entwickler-Handbuch
eZ Components geb., mit CD 454 S., 39,90 Euro Galileo Computing ISBN 978-3-8362-1073-7 |
| 5 Konfiguration
|  | 5.1 Nutzen in der Applikation
|  | 5.2 Die Configuration-Komponente
|  | 5.3 Integration der Komponente
|  |  | 5.3.1 Basiseinstellungen
|  |  | 5.3.2 Komplexe Indizes
|  | 5.4 Direkter Zugriff
|  |  | 5.4.1 Änderungen speichern
|  |  | 5.4.2 Schnellerer Zugriff durch PHP-Arrays
|  |  | 5.4.3 Lazy-Initialization
|  | 5.5 Fazit
## 5.4 Direkter Zugriff 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. ### 5.4.1 Änderungen speichern 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. ### 5.4.2 Schnellerer Zugriff durch PHP-Arrays 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. ### 5.4.3 Lazy-Initialization 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 | <top> | vor >>
Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen? Ihre Meinung
Buchempfehlungen
| PHP 5.3 und MySQL 5.1
| Besser PHP programmieren
| Webshops mit Magento
| Sichere Webanwendungen
| PHP 5.3 und MySQL 5.1 - Videotraining
| Apache 2
| Suchmaschinen- Optimierung für Webentwickler
| Joomla! 1.5
Shopping
Versandkostenfrei bestellen in Deutschland und Österreich Info

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