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