0 follower

View

En vy (view) är ett PHP-skript huvudsakligen bestående av element som hör till användargränssnittet. Vyn kan innehålla PHP-satser, men det rekommenderas att dessa satser inte ändrar datamodeller samt att de förblir relativt enkla. I andan av separation mellan programlogik och presentation, bör stora block av programlogik placeras i kontroller eller modell istället för i vyn.

En vy har ett namn avsett att identifiera vyns skriptfil vid rendering. Vyn och dess skriptfil har samma namn. Till exempel, vyn edit refererar till en vyskriptfil med namnet edit.php. En vy kan renderas genom anrop till CController::render() med vyns namn bifogat. Metoden kommer att söka efter motsvarande vyfil i katalogen protected/views/ControllerID.

I vyns skriptfil kan kontrollerinstansen adresseras med hjälp av $this. Vi kan därför hämta in (pull) varje egenskap (property) från kontrollern genom att utvärdera $this->propertyName i vyn.

Vi kan också trycka ut (push) data till vyn:

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

I ovanstående exempel kommer metoden render() att extrahera arrayen i parameter 2 till variabler. Resultatet blir att vi i vyskriptet kan använda de lokala variablerna $var1 och $var2.

1. Layout

Layout är en speciell vy som används för att dekorera vyer. Den innehåller vanligtvis delar av användargränssnittet vilka är gemensamma för många vyer. Till exempel kan en layout innehålla sidhuvud och sidfot samt bädda in innehållsvyn däremellan,

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

där $content innehåller renderingsresultatet för innehållsvyn.

Layout blir underförstått applicerad vid anrop till render(). Som standard används vyskriptet protected/views/layouts/main.php som layout. Detta kan anpassas genom att ändra antingen CWebApplication::layout eller CController::layout. Använd renderPartial() för rendering av en vy utan att applicera någon layout.

2. Widget

En widget är en instans av CWidget eller nedärvd klass. Den är en komponent huvudsakligen avsedd för presentation. Widget bäddas vanligen in i vyskript för att generera något komplext, men ändå komplett och oberoende, användargränssnitt. Till exempel kan en kalenderwidget användas till att rendera ett avancerat kalendergränssnitt. Widget möjliggör bättre återanvändningsbarhet av användargränssnittet.

För att använda en widget, gör så här i ett vyskript:

<?php $this->beginWidget('path.to.WidgetClass'); ?>
...body content that may be captured by the widget...
<?php $this->endWidget(); ?>

eller

<?php $this->widget('path.to.WidgetClass'); ?>

Det senare används när widget:en inte behöver omfatta innehåll (body content).

Widget kan konfigureras för anpassning av dess beteende. Detta sker genom att man sätter dess initiala propertyvärden vid anrop till CBaseController::beginWidget eller CBaseController::widget. Till exempel, för CMaskedTextField widget:en, vill vi kunna specificera vilken mask som skall användas. Detta kan göras genom att lämna med en array av initialvärden för widget-egenskaper (property) på följande sätt, där arrayens nycklar är egenskapsnamn, arrayvärdena initialvärden för widgetens egenskaper:

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

För att definiera en ny widget, ärv en underklass från CWidget och åsidosätt metoderna init() och run() med egna:

class MyWidget extends CWidget
{
    public function init()
    {
        // this method is called by CController::beginWidget()
    }
 
    public function run()
    {
        // this method is called by CController::endWidget()
    }
}

En widget kan. liksom en kontroller, ha sin egen vy. Som standard har en widget sina vyfiler placerade i underkatalogen views till katalogen som innehåller widgetens klassfil. Dessa vyer kan renderas genom anrop till CWidget::render(), ungefär som med en kontroller. Den enda skillnaden är att ingen layout appliceras på en widgetvy .

3. Systemvy

Systemvyer refererar till de vyer som Yii använder för att presentera felmeddelanden och loggningsinformation. Till exempel, när en användare skickar en begäran gällande en icke-existerande kontroller eller åtgärd, kommer Yii att signalera en exception som förklarar felet. Yii presenterar en exception med hjälp av en specifik systemvy.

Namn på systemvyer följer vissa regler. Namn i stil med errorXXX avser vyer för presentation, CHttpException med felkod XXX. Till exempel, om CHttpException signaleras med felkod 404, så kommer vyn error404 att visas.

Yii erbjuder en standarduppsättning systemvyer placerade under framework/views. Dessa kan anpassas genom att vyfiler med samma namn placeras under protected/views/system.