Guide

Infrastructure

Cache, sessions, uploads, filesystem et client HTTP sans coupler l’application aux internals du framework.

Mettre en cache les données reconstructibles

Utilisez CacheManager pour les données qui peuvent être recalculées, comme des listes d’articles ou la navigation. Le cache n’est pas une source de vérité.

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 [];
        });
    }
}

Sessions et messages flash

Dans les controllers, flash() est un moyen pratique d’envoyer des messages ponctuels à travers un redirect. En dehors des controllers, injectez explicitement l’abstraction de session ou de flash.

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

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

Uploads et filesystem

Utilisez upload() avec des profils configurés pour les uploads et filesystem() pour les opérations sur fichiers. Gardez les limites et répertoires cibles dans la configuration YAML.

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

Client HTTP

Pour les intégrations sortantes, injectez Psr\Http\Client\ClientInterface avec une PSR request factory. Configurez les timeouts et SSL dans 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);
    }
}