Aplicația
Orice aplicație Leto pornește din clasa Leto\Base. Ea este un singleton — o singură instanță per request — și se ocupă de inițializare, configurare și execuție.
Inițializare
În public/index.php, punctul de intrare al aplicației, vei găsi ceva de genul:
$app = Base::getInstance(__DIR__);
$app->loadConfig();
$app->loadRoutes();
$app->run();Pe măsură ce se inițializează, Base pune la dispoziție:
- un hive — un key-value store accesibil cu dot notation, unde poți stoca orice date pe durata request-ului
- obiectele Request și Response curente
- logging prin Monolog, configurat automat
- Whoops pentru afișarea prietenoasă a erorilor în development
Contexte de execuție
Metoda run() a lui Base delegă execuția către un context. Contextul este cel care decide cum se încarcă rutele și modulele aplicației.
| Context | Când se folosește |
|---|---|
SingleAppContext | O singură aplicație, fără module separate. Încarcă \App\App::routes(). |
MultipleAppsContext | Mai multe module independente. Scanează app/*/ și încarcă \Apps\{nume}\App::routes() pentru fiecare modul găsit. |
MultipleAppsApiContext | La fel ca MultipleAppsContext, dar pentru rute cu prefix /api/. Apelează api() în loc de routes(). |
ResourceContext | Servește fișiere statice (imagini, CSS, JS) cu headere de cache și CORS. |
CronContext | Pentru job-uri programate — returnează un răspuns gol, fără output HTML. |
FileAppContext | Stub pentru aplicații bazate pe fișiere. Momentan run() și sendResponse() sunt goale. |
Configurare
Configurările se încarcă din fișiere PHP, nu din YAML sau JSON. Base le expune prin hive:
$dbConfig = Base::getInstance()->config('database');Aceasta returnează conținutul fișierului config/database.php. Cheia 'database' este numele fișierului fără extensie.