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.
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.
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
Ü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.
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.
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.
messages: CPhpMessageSource - stellt übersetzte Meldungen für die Yii-Anwendung bereit.
request: CHttpRequest - stellt Informationen bereit, die sich auf den Benutzer-Request beziehen.
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.
Wenn eine Applikation einen Benutzer-Request bearbeitet, werden folgende Lebenszyklen durchlaufen:
Vor-Initialisieren der Anwendung mit CApplication::preinit();
Einrichten des Klassen-Autoloaders und der Fehlerbehandlung
Registrieren der Kernkomponenten
Laden der Anwendungskonfiguration
Initialisieren der Anwendung mit CApplication::init()
Auslösen des onBeginRequest-Events
Bearbeiten des Benutzer-Requests:
Auslösen des onEndRequest-Events
Signup or Login in order to comment.