Guía
Infraestructura
Cache, sesiones, uploads, filesystem y cliente HTTP sin acoplar la aplicación a internals del framework.
Cache para datos que se pueden reconstruir
Usa CacheManager para datos que se pueden volver a calcular, como listas de artículos o navegación. La cache no es una fuente de verdad.
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 [];
});
}
}Sesiones y mensajes flash
Dentro de controllers, flash() es una forma cómoda de enviar mensajes de un solo uso a través de un redirect. Fuera de controllers, inyecta explícitamente la abstracción de sesión o flash.
$this->flash()->set('success', 'Article saved.');
return $this->redirect($this->url()->route('articles.index'));Uploads y filesystem
Usa upload() con perfiles configurados para uploads y filesystem() para trabajar con archivos. Mantén los límites y directorios de destino en la configuración YAML.
$image = $this->upload()->uploadImage('image', 'article_image');
$content = $this->filesystem()->read($this->app()->basePath('README.md'));Cliente HTTP
Para integraciones salientes, inyecta Psr\Http\Client\ClientInterface junto con una PSR request factory. Configura timeouts y SSL en HttpClient.yaml.
<?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);
}
}