-
Notifications
You must be signed in to change notification settings - Fork 0
Vistas y Layout
Las vistas son archivos PHP puros bajo views/. Siempre se renderizan dentro del layout compartido (includes/head.php + contenido de la vista + includes/footer.php).
// Controlador
$this->view('article/show', [
'title' => 'Detalle del artículo',
'article' => $article,
]);<!-- views/article/show.php -->
<h1><?= e($article['title']) ?></h1>
<p><?= e($article['body']) ?></p>Regla de oro: usa siempre e() para imprimir datos. Nunca echo $var directamente — así es como se cuela el XSS.
-
$uri— el path actual normalizado, inyectado automáticamente porview(). Lo usahead.phppara resaltar el ítem de navegación activo. - Cualquier clave que pases en el array
$dataaview()o$this->view(). - Todos los helpers globales (
e(),url(),old(),t(),flash(), etc.), al ser funciones normales.
Todos los estilos compartidos viven en public/assets/css/app.css, cargado una sola vez desde head.php. Evita atributos style="..." inline en vistas nuevas — añade una clase a app.css en su lugar, para que todo el proyecto se mantenga visualmente coherente y personalizable desde un solo archivo.
public/assets/js/app.js por ahora solo hace desaparecer los mensajes flash automáticamente a los 5 segundos y controla el dropdown del menú de usuario (si tanuki_login está activo). Añade nuevo comportamiento interactivo ahí, en vez de bloques <script> inline en las vistas.
config/nav.php declara las entradas mostradas en includes/head.php:
return [
['label' => 'nav.home', 'href' => '/', 'match' => '/'],
['label' => 'nav.about', 'href' => '/about', 'match' => '/about'],
];label es una clave de traducción resuelta a través de t() — ver Internacionalización. match decide cuándo el ítem recibe la clase active (coincidencia exacta para /, coincidencia de prefijo para el resto).
$this->flash('success', '¡Tarea creada!');
$this->redirect('/todo');head.php lee y muestra una vez cualquier mensaje flash pendiente (success/error/warning), y luego se elimina — app.js lo hace desvanecerse automáticamente a los 5 segundos.
views/errors/404.php, 500.php, 503.php — PHP puro, con estilos mediante clases .error-page en app.css. App::configureErrors() muestra la excepción detallada en su lugar cuando APP_DEBUG=true.
view($nombre, $data)
│
├── extract($data) → hace disponible $title, etc.
├── ob_start() + require vista → captura el HTML de la vista en un buffer
├── require includes/head.php → tiene acceso a $title, $uri (del extract)
├── echo del contenido capturado
└── require includes/footer.php