Kapitola 5 z 15
Controllery a HTTP responses.
Controller koordinuje jeden HTTP use case a své závislosti dostává konstruktorem.
Plain final controller
Nové controllery jsou běžné final třídy. Framework je vytváří v Request scope, takže mohou bezpečně injektovat requestově scoped služby. Public ponechte jen metody určené pro dispatch.
app/Controllers/ArticleController.php
<?php
use Lemonade\Framework\View\ViewRendererInterface;
use Psr\Http\Message\ResponseInterface;
final readonly class ArticleController
{
public function __construct(private ViewRendererInterface $views) {}
public function detail(string $id): ResponseInterface
{
return $this->views->render('articles.detail', ['id' => $id]);
}
}ViewRendererInterface::render() vrací HTML PSR response. Parametry routy lze přijmout přímo jako argumenty action metody.
Typy odpovědí
Pro HTML view použijte ViewRendererInterface. Pro JSON, text, redirect, download nebo stream injektujte Responses.
Responses
<?php
use Lemonade\Framework\Http\Response\Responses;
use Psr\Http\Message\ResponseInterface;
final readonly class HealthController
{
public function __construct(private Responses $responses) {}
public function show(): ResponseInterface
{
return $this->responses->json(['status' => 'ok']);
}
}Responses::json() používá bezpečné JSON kódování a umožňuje zadat HTTP status, například 201 nebo 422.