Руководство

Инфраструктура

Cache, session, upload, filesystem и HTTP-клиент без привязки приложения к internals фреймворка.

Cache для данных, которые можно восстановить

Используйте CacheManager для данных, которые можно пересчитать, например списков статей или навигации. Cache не является источником истины.

example.php
use Lemonade\Framework\Cache\CacheManager;

final class ArticleFeed
{
    public function __construct(
        private readonly CacheManager $cache,
    ) {}

    public function latest(): array
    {
        return $this->cache->remember('articles.latest', 600, function (): array {
            return [];
        });
    }
}

Session и flash-сообщения

В controller flash() — удобный способ передать одноразовое сообщение через redirect. Вне controller явно передавайте абстракцию session или flash.

example.php
$this->flash()->set('success', 'Article saved.');

return $this->redirect($this->url()->route('articles.index'));

Upload и filesystem

Для upload используйте upload() с настроенными профилями, а для работы с файлами — filesystem(). Ограничения и целевые каталоги храните в YAML-конфигурации.

example.php
$image = $this->upload()->uploadImage('image', 'article_image');
$content = $this->filesystem()->read($this->app()->basePath('README.md'));

HTTP-клиент

Для исходящих интеграций передавайте Psr\Http\Client\ClientInterface вместе с PSR request factory. Timeout и SSL настраивайте в HttpClient.yaml.

example.php
<?php

declare(strict_types=1);

namespace App\Services;

use Psr\Http\Client\ClientInterface;
use Psr\Http\Message\RequestFactoryInterface;

final class StatusApi
{
    public function __construct(
        private readonly ClientInterface $client,
        private readonly RequestFactoryInterface $requests,
    ) {}

    public function check(): void
    {
        $request = $this->requests->createRequest('GET', 'https://status.example.test/health');
        $this->client->sendRequest($request);
    }
}