Salt la conținut

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ă null dacă URL-ul nu conține un ID valid.
  • EventTracer::trace() / printEvents() - înregistrează și afișează evenimentele dintr-un request, util la debugging.