Leitfaden

Views & Layouts

Wie Layout, Page View, gemeinsame Daten und Partials zusammenspielen.

Wie eine Seite zusammengesetzt wird

Der Controller wählt Layout und Page View, übergibt gemeinsame Daten und liefert eine HTML-Response zurück. Vereinfacht gilt: 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 und Partials

Das Layout enthält die gemeinsame Seitenstruktur. Das Page View enthält den konkreten Seiteninhalt. Ein Partial oder eine kleine Komponente rendert einen wiederverwendbaren Ausschnitt.

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>

Optionaler Helper im AppController

Wenn die Anwendung dieses Rendering-Muster häufig nutzt, kann sie über view()->template() beispielsweise AppController::page() ergänzen. Das ist eine Anwendungsabkürzung und keine Framework-Vorgabe.

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,
            ),
        );
    }
}