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.