Applikation
Die Applikation (bzw. Anwendung) bildet die Laufzeitumgebung bei der
Verarbeitung eines Requests. Ihre Hauptaufgabe besteht im Auflösen eines Requests
und dessen Weiterleitung an den zuständigen Controller. Außerdem dient dieses
Objekt als zentraler Speicherort für Konfigurationsdaten der gesamten Anwendung.
Das Applikationsobjekt wird vom Startscript als
Singleton erzeugt und kann daher an jeder Stelle über Yii::app()
abgerufen werden.
Konfiguration
Standardmäßig besteht eine Applikation aus einer Instanz der Klasse CWebApplication.
Beim Erstellen dieses Objekts wird in der Regel eine Konfigurationsdatei
(oder ein Array mit Konfigurationsdaten) übergeben, um
die nötigen Einstellungen an der Applikation vorzunehmen. Alternativ dazu
kann man auch eine Klasse von CWebApplication ableiten und die
Konfigurationsdaten dort "hardcoden" (also direkt im Klassenquelltext
hinterlegen).
Das Konfigurationsarray besteht aus Schlüssel-Wert-Paaren. Schlüssel und
Wert entsprechen den Eigenschaftsnamen und (Start-)Werten des
Applikationsobjekts. Mit dem folgenden Array wird z.B. die Eigenschaft
name und
defaultController (Standardcontroller)
konfiguriert:
array(
'name'=>'Yii Framework',
'defaultController'=>'site',
)
Für gewöhnlich wird die Konfiguration in einer eigenen PHP-Datei abgelegt
(z.B. protected/config/main.php). Dieses Script liefert das
Konfigurationsarray folgendermaßen zurück:
Der Name der Konfigurationsdatei kann als Parameter an den Konstruktor der
Applikation übergeben werden oder wie im folgenden Beispiel an
Yii::createWebApplication(). Für gewöhnlich geschieht dies im
Startscript:
$app=Yii::createWebApplication($configFile);
Tipp: Falls die Konfigurationsdaten sehr umfangreich oder kompliziert
strukturiert sind, können sie auch auf mehrere Dateien aufgeteilt werden.
In der eigentlichen Konfigurationsdatei können die einzelnen Abschnitte dann
mit include() eingebunden und zu einem vollständigen Array zusammengeführt
werden.
Anwendungsverzeichnis
Im Anwendungsverzeichnis sind alle sicherheitsempfindlichen Dateien der
Applikation abgelegt. Per Voreinstellung ist dies der protected-Ordner
im Verzeichnis, das auch das Startscript enthält. Der Pfad zum
Anwendungsverzeichnis kann in der Konfiguration über
basePath angepasst werden.
Sämtliche Inhalte in diesem Verzeichnis sollten vor Zugriff über das Web
geschützt werden. Beim Apache HTTP-Server erreicht
man das, indem eine .htaccess-Datei mit folgendem Inhalt in diesem Verzeichnis
abgelegt wird:
deny from all
Applikationskomponente
Über die flexible Komponenten-Architektur kann der Funktionsumfang einer
Applikation einfach angepasst und erweitert werden. Die Anwendung verwaltet
eine Reihe von Komponenten, von denen jede eine spezielle Aufgabe übernimmt.
Die CUrlManager- und CHttpRequest-Komponenten dienen der Anwendung zum
Beispiel beim Auflösen eines Requests.
In der Konfiguration kann über das components-Array für jede dieser
Komponenten eingestellt werden, welche Klasse dafür verwendet werden soll und
mit welchen Werten die Eigenschaften der Komponente initialisiert werden soll.
Wir können z.B. für die cache-Komponente CMemCache mit mehreren
Memcache-Servern konfigurieren:
array(
......
'components'=>array(
......
'cache'=>array(
'class'=>'CMemCache',
'servers'=>array(
array('host'=>'server1', 'port'=>11211, 'weight'=>60),
array('host'=>'server2', 'port'=>11211, 'weight'=>40),
),
),
),
)
Mit diesem Eintrag in components wird cache als Objekt der Klasse
CMemCache definiert und dessen servers-Eigenschaft beim Erstellen des
Objekts mit den angegebenen Parametern initialisiert.
Um auf eine dieser Anwendungskomponenten zuzugreifen, benutzen Sie
Yii::app()->KomponentenID, wobei KomponentenID sich auf die ID
der Komponente bezieht (z.B. Yii::app()->cache).
Eine Komponente kann auch deaktiviert werden, indem man bei ihr den
Schlüssel enabled als false konfiguriert. In diesem Fall wird null
zurückgeliefert, wenn man auf die Komponente zugreift.
Tipp: Normalerweise werden diese Komponenten erst erzeugt, wenn
zum ersten mal darauf zugegriffen wird. Wird eine Komponente während
eines Requests also gar nicht verwendet, gibt es auch keine Instanz
davon. Selbst bei vielen konfigurierten Komponenten bleibt
die Gesamtperformance so evtl. unbeeinflusst, sofern immer nur ein Teil
davon eingesetzt wird. Einige Komponenten müssen aber evtl. immer erstellt
werden, ganz egal, ob sie verwendet werden oder nicht (z.B. CLogRouter).
Das lässt sich erreichen, indem man die Komponenten-ID in der
preload-Eigenschaft ein der Konfiguration angibt.
Kernkomponenten einer Anwendung
Yii definiert bereits eine Reihe von Kernkomponenten für die üblichen
Aufgabengebiete einer Webanwendung vor. Die request-Komponente
wird z.B. für die Auflösung eines Requests und die Abfrage von
Requestinformationen wie URL und Cookies verwendet. Indem man die
Eigenschaftswerte dieser Kernkomponenten anpasst, lässt sich das
verhalten einer Yii-Anwendung bereits in weiten Grenzen steuern.
Dies sind die Kernkomponenten, die eine CWebApplication standardmäßig vorbelegt:
Lebenszyklus einer Applikation
Beim Bearbeiten eines Requests durchläuft eine Anwendung diesen Zyklus:
Vor-Initialisieren der Anwendung mit CApplication::preinit();
Einrichten des Klassen-Autoloaders und der Fehlerbehandlung
Registrieren der Kernkomponenten
Laden der Konfiguration
Initialisieren der Anwendung mit CApplication::init()
- Registrieren von Behaviors
- Laden von statischen Komponenten
Auslösen des onBeginRequest-Events
Bearbeiten des Benutzer-Requests:
- Auflösen des Benutzer-Requests
- Erzeugen des Controllers
- Ausführen des Controllers
Auslösen des onEndRequest-Events
$Id: basics.application.txt 1601 2009-12-18 04:31:19Z qiang.xue $