View

Ein View ist ein PHP-Script, das hauptsächlich Elemente der Benutzerschnittstelle erzeugt. Es kann durchaus PHP-Befehle enthalten. Aber es wird dringend empfohlen, diese Anweisungen sehr einfach zu halten und z.B. keine Datenmodels zu verändern. Im Sinne einer Trennung von Logik und Präsentation, sollten größere Logikblöcke besser im Controller oder im Model untergebracht werden.

Der Name eines Views entspricht seinem Dateinamen. Der View edit bezieht sich somit auf die 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 Viewdatei.

Innerhalb eines Views kann über $this auf die Controllerinstanz zugegriffen werden. Mit $this->propertyName kann man so im View jede Eigenschaft des Controllers beziehen. Man nennt das auch pull-Verfahren (ziehen).

Der Controller kann die Daten auch in den View "schieben", also entsprechend einen push-Ansatz (schieben) verfolgen:

$this->render('edit', array(
    'var1'=>$value1,
    'var2'=>$value2,
));

Die Methode render() extrahiert den zweiten Array-Parameter in einzelne Variablen. Im Viewscript stehen dann die lokalen Variablen $var1 und $var2 zur Verfügung.

1. Layout

Ein Layout ist ein spezieller View, der zum "Dekorieren" anderer Views verwendet wird. Normalerweise besteht er aus den Teilen, die mehrere Views gemeinsam haben. Ein Layout kann zum Beispiel Header- und Footerabschnitt enthalten, und den Viewinhalt zwischen den beiden einbinden,

......header hier......
<?php echo $content; ?>
......footer hier......

wobei $content das Renderergebnis des eigentlichen Views enthält.

Ein Layout wird immer "übergestülpt", wenn ein View mit render() erstellt wird. Per Vorgabe wird dazu die Datei protected/views/layouts/main.php als Layout verwendet. Über CWebApplication::layout oder CController::layout kann der Pfad zum Layoutview angepasst werden. Möchte man einen View ohne Layout rendern, kann man stattdessen renderPartial() aufrufen.

2. Widget

Ein Widget (sinngem.: Dings) ist eine Instanz von CWidget oder einer davon abgeleiteten Klasse. Widgets sind Komponenten, die praktisch ausschließlich zur Anzeige dienen. Für gewöhnlich werden sie in Views verwendet, um komplexe, in sich geschlossene Bedienelemente zu erzeugen. Ein Kalenderwidget könnte z.B. ein ausgefeiltes Kalender-Bedienelement rendern. Widgets tragen so wesentlich zur Wiederverwendbarkeit von Seitenkomponenten bei.

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'); ?>

Die zweite Form wird verwendet, wenn das Widget keinen eingebetteten Inhalt benötigt.

Auch Widgets können konfiguriert werden. Dazu übergibt man beim Aufruf von CBaseController::beginWidget oder CBaseController::widget ein weiteres Array mit den gewünschten Konfigurationsparametern. Bei CMaskedTextField kann man so zum Beispiel die zu verwendende Maske angeben. Wie üblich entsprechen die Schlüssel und Werte des Arrays den Parameternamen und -werten des Widgets:

<?php
$this->widget('CMaskedTextField',array(
    'mask'=>'99/99/9999'
));
?>

Wenn Sie ein neues Widget erstellen möchten, erweitern Sie einfach CWidget und überschreiben die Methoden init() und run().

class MyWidget extends CWidget
{
    public function init()
    {
        // Diese Methode wird bei CController::beginWidget() aufgerufen
    }
 
    public function run()
    {
        // Diese Methode wird bei CController::endWidget() aufgerufen
    }
}

Auch ein Widget kann, ähnlich einem Controller, eine eigene Viewdatei verwenden. Standardmäig werden Widgetviews im Unterordner views des Verzeichnisses gesucht, in dem die Widgetklasse abgelegt wurde. Wie im Controller können diese Views mit CWidget::render() gerendert werden. Der einzige Unterschied besteht darin, dass kein Layout auf einen Widgetview angewendet wird. Außerdem bezieht sich $this in diesem View auf das Widgetobjekt, nicht auf den Controller.

Tip: Um Widgets einfach seitenweit zu konfigurieren, kann CWidgetFactory::widgets verwendet werden. Weitere Informationen dazu finden Sie im Bereich Themes.

3. Systemview

Systemviews werden von Yii für die Anzeige von Fehler- und Loginformationen verwendet. Fordert ein Besucher z.B. eine Route an, die nicht existiert, löst Yii eine Exception aus, die den Fehler näher beschreibt. Für diese Exception verwendet Yii einen speziellen Systemview.

Die Bezeichnung von Systemviews folgt einem Schema. Namen wie errorXXX werden zur Anzeige von CHttpExceptions mit HTTP-Fehlercode XXX verwendet. Eine CHttpException mit dem Fehlercode 404, wird z.B. mit dem View error404 angezeigt.

Yii stellt eine Reihe von Vorgabe-Systemviews bereit, die unter framework/views zu finden sind. Man kann sie leicht anpassen, indem man gleichnamige Viewdateien in protected/views/system anlegt.

Be the first person to leave a comment

Please to leave your comment.