Views & Templates
River utilise un moteur de template simple basé sur PHP natif. Pas de syntaxe complexe à apprendre.
Créer une Vue
Les fichiers de vue sont stockés dans app/Views/. Ce sont des fichiers .php classiques.
Exemple : app/Views/pages/home.php
<h1><?= $this->e($title) ?></h1>
<p>Bienvenue sur mon site !</p>
<ul>
<?php foreach ($items as $item): ?>
<li><?= $this->e($item) ?></li>
<?php endforeach; ?>
</ul>
Helpers de Vue
Dans vos templates, $this fait référence à l'objet Template, qui offre des helpers de sécurité et d'organisation.
Échappement (XSS)
Utilisez toujours $this->e() pour échapper les variables affichées :
<?= $this->e($user_input) ?>
Partials (Inclusions)
Pour inclure un sous-template (ex: une carte, un bouton) :
<?= $this->partial('partials/card', ['post' => $post]) ?>
<!-- ou l'alias -->
<?= $this->include('partials/footer') ?>
Variables par défaut
Pour éviter les erreurs "Undefined variable" :
<?= $this->get('username', 'Invité') ?>
Génération d'URL
Utilisez $this->url() pour générer des URLs à partir de routes nommées, directement dans les templates :
<!-- Lien simple -->
<a href="<?= $this->url('home') ?>">Accueil</a>
<!-- Avec paramètres -->
<a href="<?= $this->url('blog.show', ['id' => $post['id']]) ?>">
<?= $this->e($post['title']) ?>
</a>
<!-- Dans un formulaire -->
<form action="<?= $this->url('admin.users.store') ?>" method="POST">
...
</form>
roads.php via ->name('route.name').
Une InvalidArgumentException est levée si le nom n'existe pas.
Résumé des helpers Template
| Méthode | Description |
|---|---|
$this->e($value) |
Échappe HTML (protection XSS) |
$this->url($name, $params) |
Génère une URL depuis une route nommée |
$this->partial($tpl, $data) |
Inclut un sous-template |
$this->has($key) |
Vérifie si une variable existe |
$this->get($key, $default) |
Récupère une variable avec valeur par défaut |
Layouts
Les vues sont injectées dans un layout principal. Par défaut, c'est app/Views/layouts/main.php.
Le layout reçoit le contenu de la vue dans la variable $content.
<!DOCTYPE html>
<html>
<body>
<nav>...</nav>
<main>
<?= $content ?>
</main>
<footer>...</footer>
</body>
</html>
Données partagées (share)
Pour injecter une variable dans tous les templates (vues, layouts, partials), utilisez $view->share(). C'est utile pour des données globales comme l'utilisateur connecté, les assets, etc.
// Dans un provider ou un middleware
$view->share('auth', $auth);
$view->share('vite', $vite_assets);
La variable est ensuite disponible directement dans chaque template :
<?php if ($auth->check()): ?>
Bonjour <?= $this->e($auth->user()->name) ?>
<?php endif ?>
$auth dans tous les templates via Auth_provider. Vous n'avez rien à faire pour y accéder.
render() porte le même nom qu'une variable partagée, la variable locale a la priorité.