Controllery
Controller je PHP třída vytvořená v Request scope. Závislosti přijímá v konstruktoru a může rovnou vrátit odpověď PSR-7.
Akce a závislosti
Container vytvoří ArticleController v request scope a konstruktorem mu předá renderer a aplikační ArticleRepository. Argument id akce detail() pochází ze stejnojmenného segmentu routy. Výsledek repository předá controller view articles.detail; render() vrátí PSR-7 odpověď.
<?php
declare(strict_types=1);
namespace App\Controllers;
use App\Services\ArticleRepository;
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),
]);
}
}Přístup k požadavku
Akce může přijmout ServerRequestInterface nebo requestovou službu RequestData. U formulářů je potřeba ověřit typ výsledku getParsedBody(); u JSON vstupu lze použít RequestData::jsonPayload().
HTTP odpověď
HealthController injektuje Responses a v show() vrací JSON místo HTML view. Metoda json() vytvoří PSR-7 odpověď s výchozím statusem 200; pro jiný status přijímá druhý argument. Stejná služba umí vracet také text nebo přesměrování.
<?php
declare(strict_types=1);
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']);
}
}