Die Applikation (bzw. Anwendung) bildet die abgeschlossene Laufzeitumgebung
innerhalb der ein Request bearbeitet wird. Ihr Hauptzweck liegt darin, einige
Informationen über den vorliegenden Request zu sammeln und diesen dann zur
Bearbeitung an den richtigen Controller weiterzuleiten. Außerdem dient dieses
Objekt als zentraler Speicherort für Konfigurationsdaten der gesamten Anwendung.
Man nennt dieses Objekt auch Front-Controller
.
Das Applikationsobjekt wird vom Startscript als Singleton erzeugt und kann daher an jeder Stelle über Yii::app() abgerufen werden.
Standardmäßig besteht eine Applikation aus einer Instanz der Klasse CWebApplication. Beim Instanziieren 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:
return array(...);
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.
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
Ü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.
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:
assetManager: CAssetManager - verwaltet die Veröffentlichung privater Asset-Dateien (sinngem.: Zusatzdateien).
authManager: CAuthManager - verwaltet die rollenbasierte Zugriffskontrolle (RBAC, engl.: role-based access control).
cache: CCache - stellt Funktionalität zum Cachen von Daten bereit. Beachten Sie, dass Sie eine existierende Klasse (z.B. CMemCache, CDbCache) angeben müssen. Andernfalls wird null zurückgeliefert, wenn Sie auf diese Komponente zugreifen.
clientScript: CClientScript - verwaltet Clientscripts (Javascripts und CSS).
coreMessages: CPhpMessageSource - stellt übersetzte Kernmeldungen für das Yii-Framework bereit.
db: CDbConnection - stellt eine Datenbankverbindung bereit. Beachten Sie, dass sie deren connectionString-Eigenschaft konfigurieren müssen um diese Komponente zu verwenden.
errorHandler: CErrorHandler - bearbeitet nicht-abgefangene PHP-Fehler und -Exceptions.
format: CFormatter - formatiert Datenwerte für die Anzeige.
messages: CPhpMessageSource - stellt übersetzte Textmeldungen für die Yii-Anwendung bereit.
request: CHttpRequest - stellt Informationen über den HTTP-Request bereit
securityManager: CSecurityManager - stellt Sicherheitsdienste bereit, wie z.B. Hashing, Verschlüsselung.
session: CHttpSession - stellt sessionbezogene Funktionen zur Verfügung.
statePersister: CStatePersister - stellt Methoden zur globalen beständigen Datenhaltung bereit.
urlManager: CUrlManager - beinhaltet Funktionen zur URL-Analyse und -Erstellung.
user: CWebUser - repräsentiert die Idenitätsinformationen des aktuellen Benutzers.
themeManager: CThemeManager - verwaltet Themes.
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()
Auslösen des onBeginRequest-Events
Bearbeiten des Benutzer-Requests:
Auslösen des onEndRequest-Events
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.