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>
La route doit être nommée dans 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 ?>
Par défaut, River partage automatiquement $auth dans tous les templates via Auth_provider. Vous n'avez rien à faire pour y accéder.
Si une variable locale passée à render() porte le même nom qu'une variable partagée, la variable locale a la priorité.