Yii - Vistas

Las vistas son responsables de presentar los datos a los usuarios finales. En aplicaciones web,Views son solo archivos de script PHP que contienen código HTML y PHP.

Creando Vistas

Step 1 - Echemos un vistazo al ‘About’ vista de la plantilla de aplicación básica.

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

los $this variable se refiere al componente de vista que administra y representa esta plantilla de vista.

Así es como el ‘About’ la página se parece a:

Es importante codificar y / o filtrar los datos provenientes del usuario final para evitar los ataques XSS. Siempre debe codificar un texto sin formato llamandoyii\helpers\Html::encode() y contenido HTML llamando yii\helpers\HtmlPurifier.

Step 2 - Modificar el ‘About’ Ver de la siguiente manera.

<?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 - Ahora escribe http://localhost:8080/index.php?r=site/about. Verá la siguiente pantalla.

Observe que el código javascript dentro del Html::encode()La función se muestra como texto sin formato. Lo mismo es paraHtmlPurifier::process()llamada. Solo se muestra la etiqueta h1.

Las vistas siguen estas convenciones:

  • Las vistas, que son renderizadas por un controlador, deben colocarse en el @app/views/controllerID carpeta.

  • Las vistas, que se representan en un widget, deben colocarse en el widgetPath/views folder.

Para hacer un view within a controller, puede utilizar los siguientes métodos:

  • render() - Renderiza una vista y aplica un diseño.

  • renderPartial() - Renderiza una vista sin diseño.

  • renderAjax() - Representa una vista sin un diseño, pero inyecta todos los archivos js y css registrados.

  • renderFile() - Representa una vista en una ruta de archivo o alias determinados.

  • renderContent() - Representa una cadena estática y aplica un diseño.

Para hacer un view within another view, puede utilizar los siguientes métodos:

  • render() - Renderiza una vista.

  • renderAjax() - Representa una vista sin un diseño, pero inyecta todos los archivos js y css registrados.

  • renderFile() - Representa una vista en una ruta de archivo o alias determinados.

Step 4 - Dentro de la carpeta vistas / sitio, cree dos archivos de vista: _part1.php and _part2.php.

_part1.php -

<h1>PART 1</h1>

_part2.php -

<h1>PART 2</h1>

Step 5 - Finalmente, renderice estas dos vistas recién creadas dentro del ‘About’ Ver.

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

Verá la siguiente salida:

Al renderizar una vista, puede definir la vista usando un nombre de vista o una ruta / alias de archivo de vista. El nombre de una vista se resuelve de la siguiente manera:

  • El nombre de una vista puede omitir la extensión. Por ejemplo, la vista about corresponde al archivo about.php.

  • Si el nombre de la vista comienza con "/", entonces si el módulo actualmente activo es foro y el nombre de la vista es comentario / publicación, la ruta sería @ app / modules / forum / views / comment / post. Si no hay un módulo activo, la ruta sería @ app / views / comment / post.

  • Si el nombre de la vista comienza con "//", la ruta correspondiente sería @ app / views / ViewName. Por ejemplo, // site / contact corresponde a @ app / views / site / contact.php.

  • Si el nombre de la vista es contacto y el controlador de contexto es SiteController, la ruta sería @ app / views / site / contact.php.

  • Si la vista de precio se representa dentro de la vista de bienes, entonces el precio se resolvería como @ app / views / invoice / price.php si se representa en @ app / views / invoice / goods.php.

Acceder a datos en vistas

Para acceder a los datos dentro de una vista, debe pasar los datos como segundo parámetro al método de representación de la vista.

Step 1 - Modificar el actionAbout del SiteController.

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

En el código dado arriba, pasamos dos variables $email y $phone para renderizar en el About ver.

Step 2 - Cambiar el código de vista Acerca de.

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

Acabamos de agregar dos variables que recibimos del SiteController.

Step 3 - Escriba la URL http://localhost:8080/index.php?r=site/about en el navegador web, verá lo siguiente.