1. Qu'est-ce que le cycle de vie d'une requete dans Laravel ?
Toute requete entre par public/index.php, qui charge l'autoloader Composer et demarre l'application via bootstrap/app.php. Le kernel HTTP recoit la requete et la fait passer par les middleware globaux (maintenance mode, cookies, session, CSRF). Le router identifie la route correspondante et execute les middleware de route. Le controleur traite la logique metier et retourne une reponse. La reponse traverse les middleware en sens inverse. Enfin, la reponse est envoyee au client. Le service container (IoC) gere l'injection de dependances tout au long de ce cycle. Les service providers enregistrent les services au demarrage de l'application.
2. Expliquez Eloquent ORM et ses relations.
Eloquent est l'ORM Active Record de Laravel. Chaque modele correspond a une table. Relations disponibles : hasOne/belongsTo (un-a-un), hasMany/belongsTo (un-a-plusieurs), belongsToMany (plusieurs-a-plusieurs avec table pivot), hasManyThrough (relation a travers un modele intermediaire), morphTo/morphMany (relations polymorphes). Le lazy loading charge les relations a l'acces (risque N+1), le eager loading avec with() charge en une seule requete. Les scopes (locaux et globaux) encapsulent les conditions de requete. Les accessors/mutators transforment les attributs. Les casts convertissent automatiquement les types (JSON, date, enum).
3. Comment fonctionne le systeme de migration dans Laravel ?
Les migrations sont des fichiers PHP qui definissent les modifications de schema de base de donnees de maniere versionnee et reversible. Chaque migration a deux methodes : up() (appliquer) et down() (annuler). Commandes : php artisan migrate (appliquer), migrate:rollback (annuler la derniere batch), migrate:fresh (tout reconstruire). Les migrations utilisent le Schema Builder pour creer/modifier les tables de maniere agnostique au SGBD. Bonnes pratiques : une migration par changement logique, ne jamais modifier une migration deja deployee, utiliser les seeders et factories pour les donnees de test. Les colonnes nullable et les valeurs par defaut facilitent les deployments sans interruption.
4. Qu'est-ce que le Service Container et l'injection de dependances ?
Le Service Container (ou IoC Container) est le coeur de Laravel. Il gere l'instanciation et la resolution des dependances automatiquement. Quand un controleur type-hint une interface ou une classe, le container l'injecte automatiquement. Trois types de bindings : bind (nouvelle instance a chaque resolution), singleton (une seule instance partagee), instance (objet deja instancie). Les Service Providers enregistrent les bindings dans la methode register(). Le container supporte le contextual binding (une implementation differente selon qui la demande) et l'auto-resolution (pas besoin de binding pour les classes concretes).
5. Comment securiser une application Laravel ?
Laravel fournit de nombreuses protections nativement. CSRF : token genere automatiquement dans les formulaires avec la directive Blade csrf. XSS : l'echappement automatique avec les doubles accolades dans Blade. SQL Injection : Eloquent et le Query Builder utilisent des requetes parametrees. Authentification : Sanctum (SPA, mobile), Passport (OAuth2), Breeze/Jetstream pour le scaffolding. Autorisation : Gates (closures) et Policies (classes) pour le controle d'acces. Rate limiting configurable par route. Encryption : chiffrement AES-256-CBC avec la cle APP_KEY. Valider toutes les entrees avec les Form Requests. Utiliser signed URLs pour les liens sensibles.
6. Expliquez le fonctionnement des queues et des jobs en Laravel.
Les queues permettent de differer l'execution de taches longues (envoi d'emails, traitement d'images, appels API). Un Job est une classe avec une methode handle(). On dispatch un job avec dispatch(new ProcessPodcast). Drivers supportes : database, Redis, SQS, Beanstalkd. Les workers (php artisan queue:work) consomment les jobs. Fonctionnalites : retry automatique avec backoff exponentiel, failed jobs table pour les echecs, job batching pour les groupes de jobs, rate limiting des jobs, middleware de job pour la logique transverse. Laravel Horizon offre un dashboard de monitoring pour Redis. Toujours superviser les workers avec un process manager (Supervisor).
7. Qu'est-ce que les Events et Listeners dans Laravel ?
Le systeme d'evenements de Laravel implemente le pattern Observer. Un Event est une classe contenant les donnees de l'evenement. Un Listener est une classe avec une methode handle() qui reagit a l'evenement. Enregistrement dans EventServiceProvider ou avec l'attribut ShouldDiscoverEvents. On dispatch avec event(new OrderShipped($order)). Les listeners peuvent etre synchrones ou queued (en implementant ShouldQueue). Utilisation : notifications apres une commande, logging d'activite, mise a jour de cache, synchronisation avec des services externes. Les subscribers regroupent plusieurs listeners lies dans une seule classe.
8. Comment optimiser les performances d'une application Laravel ?
Commandes de cache : config:cache, route:cache, view:cache pour la production. Eager loading systematique pour eviter le N+1 (utiliser le package beyondcode/laravel-query-detector en dev). Cache applicatif avec Redis : Cache::remember() pour les requetes couteuses. Pagination au lieu de get() sur les grandes collections. Queues pour les taches lourdes. Database : index sur les colonnes filtrees, select() pour limiter les colonnes, chunk() pour les gros volumes. OPcache pour le cache de bytecode PHP. CDN pour les assets. Laravel Octane (Swoole/RoadRunner) pour garder l'application en memoire et eviter le bootstrap a chaque requete.
9. Expliquez les API Resources et les Form Requests.
Les API Resources transforment les modeles Eloquent en reponses JSON structurees. Classe avec une methode toArray() definissant les champs exposes. Les Resource Collections gerent les listes avec pagination. Avantages : separation entre modele et representation API, logique de transformation centralisee, support conditionnel (whenLoaded pour les relations). Les Form Requests encapsulent la validation dans des classes dediees. Methodes : authorize() (autorisation), rules() (regles de validation), messages() (messages personnalises). Injectees automatiquement dans les controleurs. Cela garde les controleurs propres et reutilise la validation entre endpoints.
10. Comment tester une application Laravel ?
Laravel utilise PHPUnit (et Pest en alternative). Types de tests : Unit (classes isolees, rapides), Feature (requetes HTTP, base de donnees, integration). Le trait RefreshDatabase remet la base a zero entre chaque test. Les factories generent des modeles avec des donnees realistes (Faker). Methodes de test HTTP : get(), post(), assertStatus(), assertJson(), assertSee(). Mocking avec Mockery ou les facades de Laravel (Mail::fake(), Queue::fake(), Event::fake()). Tester les notifications, les jobs, les events avec les fakes integres. Le test browser avec Laravel Dusk pour les tests end-to-end. Viser une couverture des chemins critiques plutot qu'un pourcentage arbitraire.