Yii - Viste

Le visualizzazioni sono responsabili della presentazione dei dati agli utenti finali. Nelle applicazioni web,Views sono solo file di script PHP contenenti codice HTML e PHP.

Creazione di viste

Step 1 - Diamo un'occhiata al file ‘About’ visualizzazione del modello di applicazione di base.

<?php
   /* @var $this yii\web\View */ use yii\helpers\Html; $this->title = 'About';
   $this->params['breadcrumbs'][] = $this->title;
?>
<div class="site-about">
   <h1><?= Html::encode($this->title) ?></h1>
   <p>
      This is the About page. You may modify the following file to customize its content:
   </p>
   <code><?= __FILE__ ?></code>
</div>

Il $this variabile fa riferimento al componente di visualizzazione che gestisce ed esegue il rendering di questo modello di visualizzazione.

Ecco come il ‘About’ la pagina appare come -

È importante codificare e / o filtrare i dati provenienti dall'utente finale per evitare gli attacchi XSS. Dovresti sempre codificare un testo semplice chiamandoyii\helpers\Html::encode() e contenuto HTML chiamando yii\helpers\HtmlPurifier.

Step 2 - Modifica il file ‘About’ Visualizza nel modo seguente.

<?php
   /* @var $this yii\web\View */ use yii\helpers\Html; use yii\helpers\HtmlPurifier; $this->title = 'About';
   $this->params['breadcrumbs'][] = $this->title;
?>
<div class="site-about">
   <h1><?= Html::encode($this->title) ?></h1>
   <p>
      This is the About page. You may modify the following file to customize its content:
   </p>
   <p>
      <?= Html::encode("<script>alert('alert!');</script><h1>ENCODE EXAMPLE</h1>>") ?>
   </p>
   <p>
      <?= HtmlPurifier::process("<script>alert('alert!');</script><h1> HtmlPurifier EXAMPLE</h1>") ?>
   </p>
   <code><?= __FILE__ ?></code>
</div>

Step 3 - Adesso scrivi http://localhost:8080/index.php?r=site/about. Vedrai la seguente schermata.

Si noti che il codice javascript all'interno del file Html::encode()la funzione viene visualizzata come testo normale. La stessa cosa è perHtmlPurifier::process()chiamata. Viene visualizzato solo il tag h1.

Le visualizzazioni seguono queste convenzioni:

  • Le viste, che vengono visualizzate da un controller, dovrebbero essere inserite nel file @app/views/controllerID cartella.

  • Le viste, che vengono visualizzate in un widget, dovrebbero essere inserite nel file widgetPath/views folder.

Per eseguire il rendering di un file view within a controller, puoi usare i seguenti metodi:

  • render() - Rende una vista e applica un layout.

  • renderPartial() - Rende una vista senza layout.

  • renderAjax() - Rende una vista senza layout, ma inserisce tutti i file js e css registrati.

  • renderFile() - Rende una vista in un dato percorso di file o alias.

  • renderContent() - Rende una stringa statica e applica un layout.

Per eseguire il rendering di un file view within another view, puoi utilizzare i seguenti metodi:

  • render() - Rende una vista.

  • renderAjax() - Rende una vista senza layout, ma inserisce tutti i file js e css registrati.

  • renderFile() - Rende una vista in un dato percorso di file o alias.

Step 4 - All'interno della cartella viste / sito, creare due file di visualizzazione: _part1.php and _part2.php.

_part1.php -

<h1>PART 1</h1>

_part2.php -

<h1>PART 2</h1>

Step 5 - Infine, esegui il rendering di queste due viste appena create all'interno del file ‘About’ Visualizza.

<?php
   /* @var $this yii\web\View */
   use yii\helpers\Html;
   $this->title = 'About'; $this->params['breadcrumbs'][] = $this->title; ?> <div class="site-about"> <h1><?= Html::encode($this->title) ?></h1>
   <p>
      This is the About page. You may modify the following file to customize its content:
   </p>
   <?= $this->render("_part1") ?> <?= $this->render("_part2") ?>
   <code><?= __FILE__ ?></code>
</div>

Vedrai il seguente output:

Quando si esegue il rendering di una vista, è possibile definire la vista utilizzando come nome della vista o percorso / alias del file di vista. Il nome di una vista viene risolto nel modo seguente:

  • Il nome di una vista può omettere l'estensione. Ad esempio, la visualizzazione about corrisponde al file about.php.

  • Se il nome della vista inizia con "/", se il modulo attualmente attivo è forum e il nome della vista è comment / post, il percorso sarà @ app / modules / forum / views / comment / post. Se non è presente alcun modulo attivo, il percorso sarebbe @ app / views / comment / post.

  • Se il nome della vista inizia con "//", il percorso corrispondente sarebbe @ app / views / ViewName. Ad esempio, // site / contact corrisponde a @ app / views / site / contact.php.

  • Se il nome della visualizzazione è contact e il controller di contesto è SiteController, il percorso sarà @ app / views / site / contact.php.

  • Se la visualizzazione del prezzo viene visualizzata nella visualizzazione delle merci, il prezzo verrebbe risolto come @ app / views / invoice / price.php se viene visualizzato in @ app / views / invoice / goods.php.

Accesso ai dati nelle viste

Per accedere ai dati all'interno di una vista, è necessario passare i dati come secondo parametro al metodo di rendering della vista.

Step 1 - Modifica il file actionAbout del SiteController.

public function actionAbout() {
   $email = "[email protected]"; $phone = "+78007898100";
   return $this->render('about',[ 'email' => $email,
      'phone' => $phone
   ]);
}

Nel codice riportato sopra, passiamo due variabili $email e $phone per eseguire il rendering in About Visualizza.

Step 2 - Modificare il codice di visualizzazione delle informazioni.

<?php
   /* @var $this yii\web\View */
   use yii\helpers\Html;
   $this->title = 'About'; $this->params['breadcrumbs'][] = $this->title; ?> <div class = "site-about"> <h1><?= Html::encode($this->title) ?></h1>
   <p>
      This is the About page. You may modify the following file to customize its content:
   </p>
   <p>
      <b>email:</b> <?= $email ?> </p> <p> <b>phone:</b> <?= $phone ?>
   </p>
   <code><?= __FILE__ ?></code>
</div>

Abbiamo appena aggiunto due variabili che abbiamo ricevuto da SiteController.

Step 3 - Digita l'URL http://localhost:8080/index.php?r=site/about nel browser web, vedrai quanto segue.