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, pornești Base și îi dai contextul de rulare:
$app = \Leto\Base::getInstance();
$app->run([\Leto\Context\SingleAppContext::class]);Reține două lucruri:
getInstance()se cheamă fără argument.Basededuce singur directorul root al proiectului (părintele luipublic/). Dai o cale explicită doar dacă vrei să suprascrii această detecție, iar__DIR__dinpublic/index.phpar fi greșit (ar pune root-ul înpublic/).run()primește numele de clasă al contextului (SingleAppContext::class), nu un alias text.Basefacenew $context(...)cu ce îi dai, deci un string ca'single-app'ar arunca „Class not found".
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 (citește și scrii în el cu helper-ele globale
get()șiset(), vezi tabelul de mai jos) - obiectele Request și Response curente
- scrierea excepțiilor neprinse în
storage/errorsprintr-unStaticLogFile(fișiere.txt) - 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 decide cum se încarcă rutele și modulele aplicației.
Pentru o aplicație obișnuită folosești SingleAppContext: încarcă \App\App::routes(), iar clasa \App\App trebuie să extindă Leto\AppBuilder\Application. Pentru majoritatea proiectelor, atât ai nevoie.
Alte contexte (multi-app, cron, CLI)
Framework-ul mai oferă câteva contexte pentru cazuri specifice:
| Context | Când se folosește |
|---|---|
MultipleAppsContext | Mai multe module independente. Scanează app/*/ și încarcă \Apps\{nume}\App::routes() pentru fiecare modul găsit. |
MultipleAppsApiContext | Ca MultipleAppsContext, dar pentru rute cu prefix /api/ și apelând api() în loc de routes(). Atenție: rezolvă clasele de aplicație în namespace-ul \App\{nume}\App, nu \Apps\ ca varianta web. |
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. |
CLIContext | Clasă abstract pentru comenzi CLI. Îți definești comanda extinzând CLIContext și implementând metoda run(): void. |
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. Le accesezi prin dot notation, cel mai simplu cu helper-ul global config():
$dbName = config('database.default');Poți cere fie o valoare „frunză" ('database.default', 'database.connections.mysql.host'), fie o cheie intermediară ('database'), caz în care primești sub-array-ul de configurare corespunzător.
Funcții globale helper
Leto expune un set de funcții globale definite în src/Utility.php, disponibile oriunde în aplicație fără import explicit:
| Funcție | Descriere |
|---|---|
app() | Returnează instanța singleton Leto\Base |
request() | Returnează obiectul Request curent |
response($content, $status, $headers) | Construiește un obiect Response. Array-urile sunt automat convertite în JSON. |
redirect($url, $statusCode) | Redirectează utilizatorul către un URL |
config($key, $default) | Citește o valoare din configurație, cu suport dot-notation |
db($connectionName?) | Returnează o conexiune la baza de date |
url($route) | Generează un URL absolut pentru o rută |
current_url() | Returnează URL-ul complet al request-ului curent |
route($name, $params) | Generează un URL absolut dintr-o rută numită |
base_path($append) | Calea root a aplicației |
public_path($append) | Calea directorului public/ |
storage_path($append) | Calea directorului storage/ |
app_path($append) | Calea directorului app/ |
config_path($append) | Calea directorului config/ |
env($key, $default) | Citește o variabilă de mediu, cu suport pentru true/false/null/empty |
get($key) | Citește o valoare din hive-ul aplicației |
set($key, $value) | Scrie o valoare în hive-ul aplicației |
value($value) | Dacă $value e callable, îl invocă; altfel returnează valoarea |
// Acces rapid la request și config
$page = request()->query->get('page', 1);
$dbName = config('database.default');
// Generare URL-uri
$homeUrl = url('/');
$loginUrl = route('login');
// Path-uri
$logoPath = public_path('img/logo.png');
$cacheDir = storage_path('cache');