Helpers
Leto include un set de clase utilitare sub namespace-ul Leto\Helpers. Fiecare acoperă o nevoie frecventă în aplicațiile web.
Strings
Manipulări de string-uri: slug-uri, generare aleatorie, eliminare diacritice, extragere subșiruri.
use Leto\Helpers\Strings;
Strings::slugify('Titlu articol'); // "titlu-articol"
Strings::generateRandom(32); // String aleatoriu de 32 caractere
Strings::remove_accents('Ștefănescu'); // "Stefanescu"
Strings::replace_once('a', 'x', 'abc'); // "xbc" (pattern, replacement, subiect; doar prima apariție)
Strings::string_between('<p>Text</p>', '<p>', '</p>'); // "Text"
Strings::string_alphanum('Hello! 123'); // "Hello123" (doar caractere alfanumerice)
Arrays
Acces și manipulare de array-uri cu dot notation, o sintaxă comodă pentru structuri imbricate.
use Leto\Helpers\Arrays;
$data = ['user' => ['name' => 'Ion', 'email' => 'ion@example.com']];
Arrays::get($data, 'user.email'); // "ion@example.com" (traversează cu punct)
Arrays::set($data, 'user.role', 'admin'); // Adaugă în structura imbricată (traversează cu punct)
Arrays::push($data, 'items', $newItem); // Push la un sub-array (traversează cu punct)
Arrays::exists($data, 'user'); // true (verifică o singură cheie, la nivelul de sus)
get(), set() și push() interpretează punctul ca traversare pe niveluri imbricate. exists() nu face asta: verifică o singură cheie literală (array_key_exists). Deci Arrays::exists($data, 'user.email') caută o cheie numită exact user.email, nu email din user.Numbers
use Leto\Helpers\Numbers;
Numbers::formatPrice(1234.56); // "1 234,56"
DateTimeFormatter
Formatare date cu suport pentru localizare. Metodele sunt statice: get() returnează un IntlDateFormatter, strftime() formatează direct.
use Leto\Helpers\DateTimeFormatter;
$formatter = DateTimeFormatter::get(); // Returnează IntlDateFormatter
echo $formatter->format($dateTime); // Formatare implicită (acceptă DateTime)
echo DateTimeFormatter::strftime('%d %B %Y', '2026-06-05'); // "05 iunie 2026"
strftime() acceptă doar un string de dată sau un timestamp int, nu un obiect DateTime. Dacă îi pasezi un DateTime, primești eroare fatală. Dacă ai un DateTime, formatează-l cu get()->format($dateTime) sau convertește-l întâi la string.Mime
Detectare tip MIME din extensia fișierului.
use Leto\Helpers\Mime;
Mime::getTypeFromFilename('document.pdf'); // "application/pdf"
Mime::getTypeFromFilename('foto.jpg'); // "image/jpeg"
Download
Servire fișiere pentru download forțat sau streaming.
use Leto\Helpers\Download;
// Forțează download-ul: primește numele fișierului și conținutul (mixed: string, resursă sau binary)
Download::force('document.pdf', $fileContents);
// Streaming dintr-un fișier de pe disk
// Semnătură: output(string $path, ?string $filename = null, string $deposit = 'attachment')
Download::output('/path/to/export.csv', 'export.csv');
// Al treilea parametru $deposit controlează header-ul Content-Disposition
// 'attachment' (implicit): forțează download
// 'inline': afișează în browser (util pentru PDF-uri, imagini)
Download::output('/path/to/report.pdf', 'report.pdf', 'inline');Is
Verificări rapide care returnează bool, utile pentru validări simple.
use Leto\Helpers\Is;
Is::email('test@example.com'); // true
Is::json('{"key":"val"}'); // true
Is::dateValid('2026-01-15'); // true
Is::bot(); // true dacă User-Agent-ul pare a fi bot
Is::audioFile('song.mp3'); // true
Is::imageFile('photo.jpg'); // true
Is::pdfFile('doc.pdf'); // true
Is::validIp('192.168.1.1'); // true
Alte utilitare
Pentru nevoi mai punctuale:
SocialMedia::extractYouTubeId($url)/embedYouTubeLink($url)- extrage ID-ul de YouTube (11 caractere) sau construiește link-ul de embed; returneazănulldacă URL-ul nu conține un ID valid.EventTracer::trace()/printEvents()- înregistrează și afișează evenimentele dintr-un request, util la debugging.