Ein View ist ein PHP-Script, das hauptsächlich aus Elementen der Bedienoberfläche besteht. Es kann auch PHP-Anweisungen enthalten, aber es wird empfohlen, dass diese Anweisungen keine Daten-Models verändern und relativ einfach gehalten werden. Im Sinne einer Trennung von Logik und Präsentation, sollten größere Logikblöcke statt im View, besser im Controller oder im Model untergebracht werden.
Ein View hat einen Namen, der beim Rendern zur Bestimmung der View-Datei
verwendet wird. Der Name eines Views entspricht dem Dateinamen des
View-Scripts. Der View edit
bezieht sich auf die Script-Datei edit.php
. Um
einen View zu rendern, rufen Sie CController::render() mit dem Namen des
Views auf. Die Methode sucht dann im Verzeichnis
protected/views/ControllerID
nach der entsprechenden View-Datei.
Innerhalb eines View-Scripts können wir über $this
auf die
Controller-Instanz zugreifen. So können wir im View mit $this->propertyName
auf jede Eigenschaft des Controllers zugreifen, was man auch als pull
-Verfahren
(ziehen) bezeichnet.
Wir können auch einen push
-Ansatz (schieben) verfolgen, um
Daten wie hier an den View zu übergeben:
$this->render('edit', array(
'var1'=>$value1,
'var2'=>$value2,
));
In obigem Fall extrahiert die Methode render() den
zweiten Array-Parameter in einzelne Variablen. Daher können wir im View-Script
auf die lokalen Variablen $var1
und $var2
zugreifen.
Ein Layout ist ein spezieller View, der zum "dekorieren" von Views verwendet wird. In der Regel enthält es die Teile der Bedienoberfläche, die mehrere Views gemeinsam haben. Ein Layout kann zum Beispiel Header- und Footer-Bereiche enthalten, und den View-Inhalt zwischen den beiden einbinden,
......header hier...... echo $content; ......footer hier......
wobei $content
das gerenderte Ergebnis des Inhalt-Views enthält.
Ein Layout wird jedesmal angewendet, wenn render()
aufgerufen wird. Per Vorgabe wird das Script in
protected/views/layouts/main.php
als Layout verwendet. Dies kann entweder
über CWebApplication::layout oder CController::layout angepasst werden.
Rufen Sie renderPartial() auf, um einen View zu
rendern, ohne ein Layout anzuwenden.
Ein Widget (sinngem.: Dings) ist eine Instanz vom Typ CWidget oder dessen Kindklassen. Es handelt sich um eine Komponente, die im Wesentlichen für Präsentationszwecke verwendet wird. Widgets werden für gewöhnlich in ein View-Script eingebettet, um einen komplexeren, jedoch in sich geschlossen Teil der Anwenderoberfläche zu erzeugen. Zum Beispiel kann man ein Kalender-Widget verwenden um ein komplexes Kalender-Bedienelement zu rendern. Widgets erlauben eine bessere Wiederverwendbarkeit von Anwenderschnittstellen.
Um ein Widget zu verwenden, gehen Sie wie folgt im View-Script vor:
$this->beginWidget('pfad.zu.Widget-Klasse'); ...Inhalt, der vom Widget erfasst werden kann... $this->endWidget();
oder
$this->widget('pfad.zu.Widget-Klasse');
Letztere Form wird verwendet, wenn das Widget keinen eingebetteten Inhalt benötigt.
Das Verhalten von Widgets kann per Konfiguration angepasst werden. Dies geschieht, indem man beim Aufruf von CBaseController::beginWidget oder CBaseController::widget die gewünschten Eigenschaftswerte übergibt. Wenn wir zum Beispiel das Widget CMaskedTextField verwenden, können wir die zu verwendende Maske angeben. Dazu können wir ein Array mit den Eigenschaftsnamen als Schlüssel und den gewünschten Startwerten als Wert übergeben:
$this->widget('CMaskedTextField',array( 'mask'=>'99/99/9999' ));
Um ein neues Widget zu definieren, erweitern Sie CWidget und überschreiben Sie dessen Methoden init() und run().
class MyWidget extends CWidget
{
public function init()
{
// Diese Methode wird von CController::beginWidget() aufgerufen
}
public function run()
{
// Diese Methode wird von CController::endWidget() aufgerufen
}
}
Wie ein Controller, kann auch ein Widget seinen eigenen View besitzen.
Standardmäßig sind die View-Dateien des Widgets im Unterverzeichnis views
des Ordners abgelegt, der die Widget-Datei enthält. Ähnlich wie im Controller
können diese Views durch Aufruf von CWidget::render() gerendert werden.
Der einzige Unterschied besteht darin, dass kein Layout auf einen Widget-View
angewendet wird.
System-Views beziehen sich auf Views, die von Yii zur Anzeige von Fehler- und Log-Informationen verwendet werden. Fordert ein Benutzer zum Beispiel einen Controller oder eine Action an, die nicht existieren, löst Yii eine Exception aus, die den Fehler beschreibt. Yii stellt diese Exception unter Zuhilfenahme eines speziellen System-Views dar.
Die Bezeichnung von System-Views folgt den selben Regeln. Namen wie
errorXXX
beziehen sich auf Views zur Anzeige einer CHttpException mit
(HTTP-)Fehlercode XXX
. Wird zum Beispiel eine CHttpException mit dem
Fehlercode 404 ausgelöst, wird der View error404
angezeigt.
Yii stellt eine Reihe von Standard-System-Views bereit, die unter
framework/views
zu finden sind. Sie können leicht angepasst werden, indem
gleichnamige View-Dateien in protected/views/system
angelegt werden.
Signup or Login in order to comment.