0 follower

Applikation

Die Applikation (bzw. Anwendung) repräsentiert die Laufzeitumgebung zur Bearbeitung eines Requests. Ihre wesentliche Aufgabe ist es, einen Benutzer-Request aufzulösen und zur Bearbeitung an einen passenden Controller weiterzuleiten. Daneben dient sie auch zur Speicherung von Konfigurationen auf Anwendungsebene an einem zentralen Ort. Daher wird die Applikation auch Front-Controller genannt.

Die Applikation wird vom Eingangsscript als Singleton erzeugt. Über Yii::app() kann von jeder Stelle aus auf das Applikationssingleton zugegriffen werden.

1. Anwendungskonfiguration

Standardmäßig ist die Applikation eine Instanz vom Typ CWebApplication. Zur Anpassung übergeben wir beim Instanziieren normalerweise eine Konfigurationsdatei (oder ein Array), um ihre Eigenschaften zu initialisieren. Alternativ kann die Anpassung auch über eine Ableitung der Klasse CWebApplication erfolgen.

Die Konfiguration besteht aus einem Array mit Schlüssel-/Wertepaaren. Jeder Schlüssel steht für den Namen einer Eigenschaft der Applikationsinstanz und jeder Wert für den Startwert dieser Eigenschaft. Die folgende Konfiguration zum Beispiel bestimmt die Eigenschaften name und defaultController (Standardcontroller) der Anwendung.

array(
    'name'=>'Yii Framework',
    'defaultController'=>'site',
)

Für gewöhnlich speichern wir die Konfiguration in einem separaten PHP-Script (z.B. protected/config/main.php). In diesem Script geben wir das Konfigurations-Array wie folgt zurück:

return array(...);

Um eine Konfiguration anzuwenden, übergeben wir deren Dateinamen als Parameter an den Konstruktor der Applikation oder wie im folgenden Beispiel an Yii::createWebApplication(). Für gewöhnlich geschieht dies im Eingangsscript:

$app=Yii::createWebApplication($configFile);

Tipp: Falls die Anwendungskonfiguration sehr komplex ist, können wir sie in mehrere Dateien aufteilen, von denen jede einen Abschnitt der Konfiguration als Array zurückliefert. In der Haupt-Konfigurationsdatei rufen wir dann include() auf, um die restlichen Konfigurationsdateien einzubinden und zu einem vollständigen Konfigurations-Array zusammenzuführen.

2. Stammverzeichnis der Anwendung

Das Stammverzeichnis einer Anwendung bezieht sich auf das Wurzelverzeichnis, das alle sicherheitsbedenklichen PHP-Scripts und Daten enthält. Standardmäßig ist dies ein Unterverzeichnis namens protected (geschützt) innerhalb des Verzeichnisses, das auch das Eingangsscript enthält. Der Ort kann über die Eigenschaft basePath in der Anwendungskonfiguration angepasst werden.

Inhalte innerhalb des Stammverzeichnisses sollten vor Zugriff durch Web-Benutzer geschützt werden. Beim Apache HTTP-Server kann dies dadurch erreicht werden, indem einfach eine .htaccess-Datei in diesem Verzeichnis abgelegt wird. Der Inhalt dieser .htaccess-Datei ist wie folgt:

deny from all

3. Applikationskomponente

Über die flexible Komponenten-Architektur kann der Funktionsumfang einer Applikation einfach angepasst und erweitert werden. Die Anwendung verwaltet eine Reihe von Applikationskomponenten, von denen jede ein spezielles Feature implementiert. So löst die Applikation zum Beispiel Benutzer-Requests mit Hilfe der CUrlManager- und CHttpRequest-Komponenten auf.

Indem wir die components-Eigenschaft der Applikation konfigurieren, können wir die Klasse und Eigenschaftswerte jeder verwendeten Applikationskomponente anpassen. Wir können z.B. die CMemCache-Komponente konfigurieren, so dass sie mehrere Memcache-Server zum Cachen verwendet:

array(
    ......
    'components'=>array(
        ......
        'cache'=>array(
            'class'=>'CMemCache',
            'servers'=>array(
                array('host'=>'server1', 'port'=>11211, 'weight'=>60),
                array('host'=>'server2', 'port'=>11211, 'weight'=>40),
            ),
        ),
    ),
)

Hier fügen wird das cache-Element zum components-Array hinzu. Das cache-Element legt als Klasse dieser Komponente CMemCache fest und initalisiert deren Eigenschaft servers mit den angegebenen Werten.

Benutzen Sie Yii::app()->KomponentenID, um auf eine Applikationskomponente zuzugreifen, wobei KomponentenID sich auf die ID der Komponente bezieht (z.B. Yii::app()->cache).

Eine Applikationskomponente kann deaktiviert werden, indem enabled in ihrer Konfiguration auf false gesetzt wird. Wenn wir auf eine deaktivierte Komponente zugreifen, wird null zurückgeliefert.

Tipp: Standardmäßig werden Applikationskomponenten erst bei Bedarf erzeugt. Das bedeutet, dass eine Komponente evtl. gar nicht erzeugt wird, wenn während eines Requests kein Zugriff auf sie stattfindet. Das führt dazu, dass die Gesamtleistung selbst dann nicht sinkt, wenn in einer Anwendung viele Applikationskomponenten konfiguriert wurden. Einige Komponenten (z.B. CLogRouter) könnten allerdings immer erstellt werden müssen, unabhängig davon, ob auf sie zugegriffen wird, oder nicht. Um dies zu erreichen, führen Sie deren IDs in der preload-Eigenschaft der Applikation auf.

4. Kernkomponenten der Applikation

Um die in Webanwendungen gebräuchlichsten Funktionen bereitzustellen, werden von Yii eine Reihe von Kernkomponenten vordefiniert. Die request-Komponente zum Beispiel, wird für die Auflösung eines Requests und die Bereitstellung bestimmter Informationen wie URL und Cookies verwendet. Indem wir die Eigenschaften von Kernkomponenten anpassen, können wir das Standardverhalten von Yii in praktisch jeder Hinsicht verändern.

Unten finden Sie eine Liste der Kernkomponenten die von CWebApplication vorbelegt werden.

5. Lebenszyklus einer Applikation

Wenn eine Applikation einen Benutzer-Request bearbeitet, werden folgende Lebenszyklen durchlaufen:

  1. Vor-Initialisieren der Anwendung mit CApplication::preinit();

  2. Einrichten des Klassen-Autoloaders und der Fehlerbehandlung

  3. Registrieren der Kernkomponenten

  4. Laden der Anwendungskonfiguration

  5. Initialisieren der Anwendung mit CApplication::init()

    • Registrieren von Anwendungs-Behaviors
    • Laden von statischen Applikationskomponenten
  6. Auslösen des onBeginRequest-Events

  7. Bearbeiten des Benutzer-Requests:

    • Auflösen des Benutzer-Requests
    • Erzeugen des Controllers
    • Ausführen des Controllers
  8. Auslösen des onEndRequest-Events