Ciclul unui request
Această pagină leagă între ele componentele de bază ale framework-ului. După ce termini Quickstart-ul, aici vezi cum circulă un request de la browser până la răspuns, printr-un exemplu complet: afișarea unui articol după id.
Fluxul are cinci etape:
Request -> Rutare -> Controller -> View -> Response- Aplicația primește request-ul HTTP și pornește contextul de execuție.
- Rutarea găsește ruta care se potrivește și extrage parametrii din URL.
- Controller-ul primește parametrii, încarcă datele din modele și pregătește răspunsul.
- View-ul transformă datele într-un HTML.
- Response trimite rezultatul înapoi la browser.
1. Aplicația pornește
Punctul de intrare (public/index.php) inițializează framework-ul și pornește contextul potrivit. Pentru o aplicație clasică, contextul e SingleAppContext:
$app = \Leto\Base::getInstance();
$app->run([\Leto\Context\SingleAppContext::class]);Contextul se ocupă de tot restul: potrivește ruta, apelează controller-ul și trimite răspunsul. Vezi Aplicația pentru contexte și configurare.
2. Definește ruta
Ruta leagă un URL de o metodă de controller. Parametrul {id} din cale devine disponibil în controller:
use App\Controllers\PostController;
use Leto\Routing\RoutesCollector;
class App extends Application
{
public function routes(RoutesCollector $route): void
{
$route->get('/posts/{id}', [PostController::class, 'show']);
}
}Detalii despre parametri, middleware și rute numite: Rutare.
3. Controller-ul primește parametrii
Parametrii rutei ajung în controller după nume: {id} din URL se leagă de argumentul $id al metodei. Controller-ul încarcă modelul și pregătește datele:
namespace App\Controllers;
use App\Models\Post;
use Leto\Http\Response;
use Leto\Views\View;
class PostController
{
public function show(int $id): Response
{
$post = Post::find($id);
$view = new View('posts/show', ['post' => $post], [app_path('Views')]);
return new Response($view->render());
}
}Numele argumentului contează, nu poziția: {id} se potrivește cu $id. Vezi Operațiuni CRUD pentru find() și restul metodelor de model.
4. View-ul randează datele
View-ul primește datele prin al doilea argument și caută fișierul template în directoarele din al treilea argument. Aici posts/show se rezolvă la Views/posts/show.php (sau .twig):
// Views/posts/show.php
<article>
<h1><?= e($post->title) ?></h1>
<div><?= $post->body ?></div>
</article>
render() întoarce un string gol, fără eroare. Detalii și escaparea corectă: Views.5. Response ajunge la browser
Controller-ul întoarce un Response. Contextul îl trimite automat la client. Un controller poate întoarce fie un Response, fie direct un string (care e împachetat într-un Response):
return new Response($view->render());
// sau, pentru un răspuns simplu:
return new Response('Salut!');Pentru JSON, dă un array la Response, iar framework-ul îl serializează automat. Vezi HTTP pentru Response, Redirect și URL.
Pe scurt
| Etapă | Componentă | Ce face |
|---|---|---|
| Request | Aplicația | Pornește contextul de execuție |
| Rutare | RoutesCollector | Potrivește URL-ul, extrage {id} |
| Controller | clasa ta | Primește $id, încarcă Post::find($id) |
| View | View | Randează posts/show cu datele |
| Response | Response | Trimite HTML-ul la browser |
De aici poți intra în fiecare componentă în parte, în ordinea din bara laterală: Aplicația, Rutare, HTTP, Views, apoi partea de date cu Struct, Validare și ORM.