Salt la conținut

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. Base deduce singur directorul root al proiectului (părintele lui public/). Dai o cale explicită doar dacă vrei să suprascrii această detecție, iar __DIR__ din public/index.php ar fi greșit (ar pune root-ul în public/).
  • run() primește numele de clasă al contextului (SingleAppContext::class), nu un alias text. Base face new $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() și set(), vezi tabelul de mai jos)
  • obiectele Request și Response curente
  • scrierea excepțiilor neprinse în storage/errors printr-un StaticLogFile (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:

ContextCând se folosește
MultipleAppsContextMai multe module independente. Scanează app/*/ și încarcă \Apps\{nume}\App::routes() pentru fiecare modul găsit.
MultipleAppsApiContextCa 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.
ResourceContextServește fișiere statice (imagini, CSS, JS) cu headere de cache și CORS.
CronContextPentru job-uri programate. Returnează un răspuns gol, fără output HTML.
CLIContextClasă abstract pentru comenzi CLI. Îți definești comanda extinzând CLIContext și implementând metoda run(): void.
FileAppContextStub 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țieDescriere
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');