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ěď.

app/Controllers/ArticleController.php
<?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í.

Responses
<?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']);
    }
}
Související dokumentaceVíce informací najdete v kapitole Controllery a HTTP responses v dokumentaci.

← Všechny ukázky