Côté produit, les offres de développeur Laravel portent souvent sur un SaaS, un back-office ou une API qui sert un front Vue ou React. Le quotidien tourne autour d'Eloquent, des jobs en file, de Sanctum et d'un front en Blade, Livewire ou Inertia. Pour préparer les questions d'entretien d'un développeur Laravel, gardez en tête deux profils proches sur le papier : celui qui assemble vite des fonctionnalités avec les outils du framework, et celui qui sait ce que ces outils produisent en base et en production.
Laravel rend beaucoup de choses faciles, et les CV finissent par se ressembler. Une relation chargée dans une boucle, un job envoyé avant la fin d'une transaction ou un env() lu hors des fichiers de configuration passent inaperçus en local et coûtent cher en production. Demandez des cas vécus, avec des volumes et des incidents.
Regardez aussi les versions. Laravel 13 est sorti en mars 2026 et demande PHP 8.3, Laravel 11 ne reçoit plus de correctifs de sécurité depuis mars 2026. Si le poste comprend la reprise d'une application en Laravel 8 ou 9, une montée de version menée jusqu'au bout pèse plus lourd qu'une liste de paquets. Le PDF contient 30 questions, un cas de 20 minutes et une grille de 1 à 4.
Les briques Laravel d'un poste de développeur PHP
Laravel 12 et 13
Le framework PHP lui-même. Laravel 13 est sorti le 17 mars 2026 et demande PHP 8.3 au minimum. Chaque version reçoit 18 mois de corrections de bugs et deux ans de correctifs de sécurité, donc une application qui n'est pas montée de version sort vite du support. Demandez sur quelle version la personne a travaillé et si elle a déjà conduit une montée de version.
Eloquent
L'ORM de Laravel, sur le modèle Active Record : chaque table a sa classe, avec ses relations. C'est très productif et c'est là que naissent la plupart des problèmes de performance, en particulier les requêtes N+1 quand les relations ne sont pas préchargées. L'assignation de masse ($fillable) est aussi un sujet de sécurité.
Files d'attente, jobs et Horizon
Les traitements longs (e-mails, exports, imports, appels à des API) partent en file sur Redis, SQS ou la base de données, et des workers les exécutent. Horizon affiche et règle les files Redis. Les doublons, les jobs perdus et les réglages de timeout reviennent souvent dans les incidents.
Blade, Livewire et Inertia
Trois manières de faire le front. Blade génère les pages côté serveur, Livewire ajoute des composants interactifs écrits en PHP, Inertia relie Laravel à Vue, React ou Svelte sans API séparée. Les starter kits de Laravel 12 et 13 reposent sur Livewire ou Inertia, Breeze et Jetstream ne sont plus mis à jour.
Sanctum, Passport et Policies
Sanctum gère l'authentification d'une SPA par cookie et les jetons d'API simples. Passport est un serveur OAuth2 complet, utile quand des partenaires se connectent à l'API. Les Policies et les Gates portent les règles d'autorisation, c'est-à-dire qui a le droit de voir ou de modifier quoi.
Pest, PHPUnit et Larastan
Pest est une surcouche de PHPUnit devenue courante dans les projets Laravel. Les tests de fonctionnalité appellent une route et vérifient la base, les jobs envoyés ou les appels HTTP simulés. Larastan, c'est PHPStan adapté à Laravel : il détecte les erreurs de type avant l'exécution.
Forge, Vapor, Laravel Cloud et Octane
Forge prépare et déploie des serveurs classiques, Vapor déploie sur AWS Lambda, Laravel Cloud est la plateforme hébergée de l'éditeur. Octane garde l'application en mémoire entre les requêtes avec FrankenPHP, Swoole ou RoadRunner. C'est plus rapide, mais le code doit éviter de garder un état d'une requête à l'autre.
MySQL, PostgreSQL et Redis
Laravel tourne le plus souvent sur MySQL ou PostgreSQL, avec Redis pour le cache, les sessions, les files et les verrous. Les migrations décrivent le schéma en PHP. Les index, les transactions et les verrous de ligne restent du ressort du développeur, Eloquent ne les gère pas à sa place.
Dans une petite équipe, le développeur Laravel tient souvent tout le back-end d'un produit : modèle de données, API, files, déploiement sur Forge, Vapor ou Laravel Cloud. Dans une équipe plus large, il travaille avec des développeurs Vue ou React, par Inertia ou par une API. Les offres associent souvent Laravel à un framework JavaScript, et certaines demandent aussi Symfony. Entre les deux frameworks, l'écart tient surtout aux conventions. Laravel privilégie Eloquent et les façades, Symfony l'injection explicite et Doctrine. Un profil Symfony s'adapte vite à Laravel, à condition d'apprendre où Eloquent cache ses requêtes.
Six points à vérifier chez un développeur Laravel
- Eloquent, SQL et performance des requêtes
- Files d'attente, jobs et événements
- Authentification, autorisation et sécurité web
- Architecture d'une application Laravel
- Tests Pest ou PHPUnit et analyse statique
- Déploiement, Octane et montées de version
Eloquent, files, sécurité : les questions pour un développeur Laravel
Chaque question vient avec ce qu'une bonne réponse contient et le signal qui doit vous alerter. Pas besoin d'être technique pour les poser : écoutez si le candidat raconte du vécu.
Question 1 · junior à confirmé
Une page liste 50 commandes avec leur client et leurs lignes, et le debugbar affiche 101 requêtes SQL. Que corrigez-vous ?
Une bonne réponseUn problème N+1 : chaque commande charge son client et ses lignes au moment où la vue y accède. La correction passe par l'eager loading avec with('customer', 'lines'), et withCount() quand la page n'affiche qu'un nombre. Un bon profil ajoute Model::preventLazyLoading() en développement pour que le chargement paresseux lève une erreur, et ne sélectionne que les colonnes utiles sur une liste paginée.
Signal d'alerte« Je mets la page en cache » comme première réponse, ou tout charger avec Order::all() puis filtrer en PHP dans une collection. Ne jamais avoir regardé le nombre de requêtes d'une page.
Question 2 · confirmé
Un job envoie l'e-mail de confirmation d'une commande. Parfois, le client reçoit l'e-mail alors que la commande n'existe pas en base. D'où vient le problème ?
Une bonne réponseLe job est envoyé dans la file pendant une transaction. Un worker le prend avant le commit, ou la transaction est annulée après coup. La réponse attendue : dispatch avec afterCommit(), ou l'option after_commit de la connexion de file, et ShouldQueueAfterCommit pour les listeners. Un profil solide sait aussi que SerializesModels recharge le modèle au moment de l'exécution, d'où une ModelNotFoundException si la ligne n'existe pas.
Signal d'alerteAjouter un délai de quelques secondes au job « pour laisser le temps à la base », ou accuser le prestataire d'e-mail.
Question 3 · confirmé
Un job d'export qui dure parfois trois minutes tourne en double, sur deux workers en même temps. Quels réglages regardez-vous ?
Une bonne réponseLe retry_after de la connexion dans config/queue.php. S'il est plus court que la durée du job, la file considère le job perdu et le redonne à un autre worker alors que le premier tourne encore. Le retry_after doit dépasser le timeout du job et celui du worker. Les exports longs vont sur une file dédiée, avec un timeout adapté et au besoin le middleware WithoutOverlapping. Sous Horizon, ces valeurs se règlent par superviseur.
Signal d'alerteAugmenter le nombre de workers, ou ne pas connaître la différence entre retry_after et timeout.
Question 4 · junior à confirmé
Un utilisateur a modifié la commande d'un autre client en changeant l'identifiant dans l'URL. Comment l'empêchez-vous dans Laravel ?
Une bonne réponseUne Policy sur le modèle Order, appelée par $this->authorize(), le middleware can ou l'attribut #[Authorize] de Laravel 13. Ou une requête bornée à l'utilisateur, du type $request->user()->orders()->findOrFail($id), avec des liaisons de route imbriquées scopées. La personne écrit un test qui vérifie la réponse 403 et précise que la règle vaut pour l'API comme pour l'interface.
Signal d'alerteMasquer le bouton dans la vue Blade, faire le contrôle côté front, ou compter sur des UUID difficiles à deviner pour toute protection.
Question 5 · junior à confirmé
Après un déploiement avec php artisan config:cache, une clé d'API lue par env() dans un service renvoie null. Pourquoi ?
Une bonne réponseUne fois la configuration mise en cache, le fichier .env n'est plus chargé et env() renvoie null hors des fichiers de config/. La règle : env() seulement dans config/*.php, et config('services.paiement.key') dans le code. La personne cite le reste du script de déploiement : config:cache, route:cache, view:cache, migrate --force et queue:restart.
Signal d'alerteLancer config:clear en production pour « régler » le problème, ou copier la clé en dur dans le code.
Recevez la fiche d'entretien complète en PDF
La fiche pour mener l'entretien de bout en bout, prête à imprimer ou à partager avec le manager.
- 30 questions sur 6 axes, avec la bonne réponse, le signal d'alerte et la relance
- Le niveau visé pour chaque question
- Une mise en situation de 20 minutes et ce qu'on attend du candidat
- La grille d'évaluation de 1 à 4, axe par axe
Recrutement d'un développeur Laravel : questions fréquentes
Quelles compétences attendre d'un développeur Laravel confirmé ?
Un PHP 8 typé, Eloquent avec une vraie maîtrise du SQL derrière (index, transactions, verrous), les files avec Redis et Horizon, Sanctum et les Policies, des tests en Pest ou PHPUnit et Larastan dans la CI. Selon le poste, ajoutez Livewire ou un front Vue ou React par Inertia, Docker et le déploiement. Sur une reprise d'existant, l'expérience d'une montée de version compte autant que la connaissance des dernières nouveautés.
Un développeur Symfony peut-il prendre un poste Laravel ?
Oui, le socle PHP, HTTP et SQL est le même. L'adaptation porte sur les conventions : Eloquent au lieu de Doctrine, les façades et les helpers, une configuration moins explicite. Le risque vient d'Eloquent, qui exécute des requêtes là où un développeur Doctrine ne les attend pas. En entretien, posez les questions sur le N+1 et les transactions, et demandez comment la personne se formerait sur les premières semaines.
Quel exercice donner en test technique à un développeur Laravel ?
Un petit dépôt existant vaut mieux qu'un projet à créer de zéro. Demandez d'ajouter une fonctionnalité avec son test, ou de relire un contrôleur qui contient un N+1, une assignation de masse et un job envoyé dans une transaction. La relecture se fait bien en direct, en une heure, et montre ce que la personne repère sans aide.
Comment juger l'expérience de production d'un candidat Laravel ?
Demandez un incident précis : un job exécuté en double, une page lente, une migration qui a verrouillé une table. Les profils qui ont tenu une application en production parlent de failed_jobs, de Horizon, du script de déploiement, de queue:restart et des volumes en jeu. Ceux qui ont surtout développé en local décrivent les fonctionnalités livrées, rarement ce qui a cassé ensuite.
Pour structurer vos autres entretiens, consultez aussi nos pages sur les questions d'entretien de recrutement, la méthode de l'entretien structuré et la grille d'évaluation d'entretien.




