Vista PHP


1Presentación

La vista PHP te permite usar plantillas escritas en PHP puro.

Esta vista no requiere ninguna biblioteca externa. Los archivos de plantilla son simples archivos PHP que se incluyen en el momento de la renderización.

Las variables de plantilla se ponen a disposición como variables PHP directamente accesibles en las plantillas.

Para usar esta vista, decláala como la vista por defecto en el archivo de configuración etc/temma.php:

<?php

return [
    'application' => [
        'defaultView' => '\Temma\Views\Php',
    ]
];

2Archivos de plantilla e inclusión

Los archivos de plantilla son simples archivos PHP, que contienen código HTML mezclado con instrucciones PHP.

Puedes segmentar tus páginas incluyendo otros archivos PHP mediante las instrucciones include o require.
Por ejemplo, supongamos que tienes dos acciones, list y show, que muestran páginas diferentes usando respectivamente los archivos list.php y show.php. Si estas dos páginas muestran la misma cabecera de página, es mejor separarla para no tener que copiarla en cada página.

Así, podrías tener el archivo header.php, que se vería así:

<html>
<head>
    <title>Título genérico de página</title>
</head>
<body>

Nuestras dos plantillas de página se verían entonces así:

<!-- archivo list.php -->
<?php include('header.php'); ?>

<h1>LISTA</h1>

</body>
<!-- archivo show.php -->
<?php include('header.php'); ?>

<h1>MOSTRAR CONTENIDO</h1>

</body>

3Variables

Las variables de plantilla definidas en el controlador son directamente accesibles en las plantillas como variables PHP.
Imagina que el controlador contiene el siguiente código:

$this['name'] = 'Anakin';

Puedes mostrar el valor de la variable name en tu plantilla:

<?=$name?>

Esto tendrá el efecto de mostrar el siguiente texto:

Anakin

Por defecto, todas las variables de plantilla (que no empiecen con un guion bajo) se ponen a disposición como variables PHP globales. También es posible definir una variable de plantilla @output que contenga un array asociativo; en ese caso, solo los pares clave-valor de ese array se definirán como variables globales.


4Listas

Supongamos que tu controlador define una variable de plantilla que contiene una lista:

$this['fruits'] = [
    'naranja',
    'plátano',
    'fresa',
];

Puedes mostrar fácilmente cualquiera de los valores de la lista:

<?=$fruits[2]?>

Y obtendrás:

fresa

5Arrays asociativos y objetos

Es posible mostrar el contenido de un elemento de un array asociativo a partir de su clave, o de un atributo de un objeto a partir de su nombre. Por ejemplo:

$this['colors'] = [
    'red'   => '#ff0000',
    'green' => '#00ff00',
    'blue'  => '#0000ff',
];

Para mostrar un color, basta con escribir:

<?=$colors['red']?>

Lo que dará:

#ff0000

6Condiciones

Para hacer un tratamiento condicional, usas las instrucciones if / else de PHP.

Por ejemplo, si tu controlador define una variable de plantilla que contiene información de un usuario:

$user = $this->_dao->get($userId);
$this['user'] = $user;

Entonces podrás mostrar un enlace solo si el usuario es administrador:

<?php if ($user['roles']['admin']): ?>
    <a href="/user/show/<?=$user['id']?>">Ver mi cuenta</a>
<?php endif; ?>

O bien:

<?php if ($user['roles']['admin']) { ?>
    <a href="/user/show/<?=$user['id']?>">Ver mi cuenta</a>
<?php } ?>

7Bucles

Muy a menudo, necesitas aplicar un tratamiento a un grupo de elementos. Esto suele tomar la forma de una lista de elementos obtenidos de la base de datos, que quieres mostrar uno tras otro.
Para hacerlo, usas la instrucción foreach de PHP.

Imagina que el controlador obtiene una lista de usuarios de la base de datos:

$users = $this->_dao->search();
$this['users'] = $users;

Es muy fácil recorrer todos los usuarios para mostrar su nombre:

<ul>
    <?php foreach ($users as $user): ?>
        <li><?=$user['name']?></li>
    <?php endforeach; ?>
</ul>

O bien:

<ul>
    <?php foreach ($users as $user) { ?>
        <li><?=$user['name']?></li>
    <?php } ?>
</ul>

8Escape

A diferencia de la vista Smarty, la vista PHP no ofrece escapado automático de las variables. Si una variable contiene caracteres especiales ("<", ">", "&", ...), no debes escribirla tal cual en la plantilla, ya que de lo contrario generarás un flujo HTML no conforme o una vulnerabilidad de seguridad XSS.

Para escapar los caracteres especiales, debes usar la función PHP htmlspecialchars():

<!-- variable escapada -->
<?=htmlspecialchars($name)?>

<!-- variable no escapada (usar solo si el contenido es de confianza) -->
<?= $name ?>

Se recomienda escapar sistemáticamente todas las variables mostradas en las plantillas, por ejemplo usando una función utilitaria:

<?php
function e($value) {
    return htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
}
?>
<p><?=e($name)?></p>
<p><?=e($email)?></p>