Guide

Views et layouts

Comment le layout, la page view, les données partagées et les partials s’assemblent.

Comment la page finale est assemblée

Le controller choisit un layout et une page view, transmet les données partagées et retourne une HTML response. En simplifiant : layout + page view + shared data = rendered page.

example.php
return $this->html(
    $this->view()->template(
        'layouts.app',
        'pages.article-detail',
        [
            'article' => $article,
        ],
    ),
);

Layouts, page views et partials

Le layout contient la structure commune de la page. La page view contient le contenu spécifique. Un partial ou un petit composant rend un fragment réutilisable.

example.php
<?php $this->start('title'); ?>Article detail<?php $this->end(); ?>

<article>
    <h1><?= e($article['title'] ?? '') ?></h1>
    <?= $this->partial('partials.article-meta', ['article' => $article]) ?>
</article>

Helper facultatif dans AppController

Si l’application utilise souvent ce mode de rendu, elle peut ajouter par exemple AppController::page() au-dessus de view()->template(). C’est une commodité applicative, pas une exigence du framework.

example.php
<?php

declare(strict_types=1);

namespace App\Controllers;

use Lemonade\Framework\Core\AbstractController;
use Psr\Http\Message\ResponseInterface;

abstract class AppController extends AbstractController
{
    /**
     * @param array<string, mixed> $data
     */
    protected function page(string $view, array $data = []): ResponseInterface
    {
        return $this->html(
            $this->view()->template(
                'layouts.app',
                $view,
                $data,
            ),
        );
    }
}