0 follower

View

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.

1. Layout

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......
<?php 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.

2. Widget

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:

<?php $this->beginWidget('pfad.zu.Widget-Klasse'); ?>
...Inhalt, der vom Widget erfasst werden kann...
<?php $this->endWidget(); ?>

oder

<?php $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:

<?php
$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.

3. System-View

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.