Kapitola 6 z 15
Views a layouty.
Renderujte PHP šablony se zřetelnými daty, společným layoutem a bezpečným escapováním.
Renderování z controlleru
Injektovaný ViewRendererInterface je requestově scoped. Metoda render() vrací response; content() vrací string pro další skládání.
Controller
<?php
use Lemonade\Framework\View\ViewRendererInterface;
use Psr\Http\Message\ResponseInterface;
final readonly class ArticleController
{
public function __construct(
private ViewRendererInterface $views,
private ArticleRepository $articles,
) {}
public function detail(string $id): ResponseInterface
{
return $this->views->render('articles.detail', [
'article' => $this->articles->get($id),
]);
}
}Název articles.detail se mapuje na odpovídající PHP view podle nakonfigurovaných view resources.
Šablona a helpery
Do view předávejte jen data, která potřebuje. Dynamický text escapujte. Pro URL, překlady, assety a CSRF používejte delegované metody na $this; requestová data poskytuje $requestHelpers.
app/Views/articles/detail.php
<?php /** @var array{id:string,title:string,body:string} $article */ ?>
<article>
<h1><?= e($article['title']) ?></h1>
<p><?= e($article['body']) ?></p>
</article>Layout, partialy a sekce zůstávají dostupné přes objekt view v $this.