Développeur full-stack PHP : Doctrine ou Eloquent, workers et Vue.js

Les postes full-stack PHP combinent Symfony ou Laravel avec MySQL ou PostgreSQL et un front en Twig, Livewire, Vue ou React. Les années de PHP sur un CV disent peu de chose sans les versions pratiquées et la façon dont les tâches lentes sortent de la requête.

Recevoir la fiche complète

Mis à jour le Par l'équipe Delectus5 min de lecture

La fiche Développeur full-stack PHP : technologies, chaîne du poste, une question et la grille d'évaluation

Le framework détermine d'abord les questions d'entretien d'un développeur full-stack PHP. Dans les offres consultées sur HelloWork, Symfony revient le plus souvent, associé à Vue.js, React ou Angular, et Laravel arrive ensuite, presque toujours avec Vue.js. MySQL et MariaDB restent les bases les plus citées, PostgreSQL progresse, et Docker et la CI apparaissent dans la plupart des annonces.

PHP a beaucoup changé depuis la version 7. Le typage strict, les enums, les classes readonly et les attributs ont transformé l'écriture d'une entité ou d'un contrôleur. Un CV peut afficher dix ans de PHP et décrire surtout de la maintenance sur Symfony 4 ou Laravel 5, sans file de messages ni analyse statique. Si votre application ressemble à ça, c'est même un atout. Pour un projet récent, demandez la dernière montée de version menée et ce qu'elle a cassé.

Côté front, trois organisations coexistent : des pages Twig ou Blade enrichies par Stimulus, Turbo ou Livewire, une application Inertia qui garde le routage côté serveur, ou une SPA Vue ou React qui appelle une API. Les questions changent selon celle de votre équipe. Le PDF regroupe l'entretien complet en 30 questions, avec un cas de 20 minutes et une grille de notation.

Symfony, Laravel et le reste de la stack full-stack PHP

PHP 8.4 et 8.5

Le langage, qui sort une version par an. PHP 8.5 date de novembre 2025, PHP 8.4 reste en support actif jusqu'à fin 2026, et PHP 8.2 ne reçoit plus de correctif de sécurité après le 31 décembre 2026. Le PHP moderne s'écrit typé, avec des enums et des objets immuables. Demandez quelle version tourne en production chez le candidat.

Symfony

Le framework le plus demandé dans les offres françaises. La version 7.4, sortie en novembre 2025, est la LTS maintenue jusqu'en novembre 2028, et la 8.1 est la version stable courante. Le conteneur de services, le composant Security, les formulaires et Messenger pour les tâches asynchrones forment le socle à vérifier.

Doctrine ORM

L'ORM utilisé avec Symfony. Il fait correspondre les classes PHP aux tables, suit les objets chargés et écrit les modifications au moment du flush. Doctrine Migrations versionne le schéma. Les lenteurs viennent souvent des relations chargées une par une et des imports massifs mal découpés.

Laravel et Eloquent

L'autre grand framework PHP. Laravel 13 est sorti en mars 2026 et demande PHP 8.3 au minimum, le support correctif de Laravel 12 s'est arrêté en août 2026. Eloquent est son ORM, les files d'attente et Horizon gèrent les tâches de fond, les policies gèrent les autorisations.

API Platform et API REST

Quand le front est une SPA ou qu'une application mobile consomme les données, le back expose une API. API Platform la génère à partir des classes Symfony, avec la documentation OpenAPI, la pagination et les filtres. Côté Laravel, on utilise les API Resources, et Laravel 13 ajoute des ressources au format JSON:API.

Twig, Blade, Symfony UX, Livewire et Inertia

Les façons de construire l'interface sans SPA complète. Twig (Symfony) et Blade (Laravel) génèrent le HTML côté serveur. Symfony UX ajoute Stimulus, Turbo et les Live Components, Livewire fait de même côté Laravel. Inertia relie un routage Laravel ou Symfony à des pages Vue ou React sans API séparée.

Vue.js ou React avec Vite

Le front JavaScript le plus fréquent dans les offres PHP est Vue 3 avec la Composition API, puis React. Vite compile les fichiers et produit un manifeste lu par Symfony ou Laravel pour servir les bons fichiers. Vérifiez que le candidat sait gérer un formulaire qui renvoie des erreurs de validation de l'API.

MySQL, MariaDB, PostgreSQL et Redis

MySQL et MariaDB dominent dans l'écosystème PHP, PostgreSQL gagne du terrain. Redis sert au cache, aux sessions et aux files de messages. Un développeur full-stack PHP doit savoir lire un EXPLAIN et poser un verrou quand deux requêtes modifient la même ligne.

PHPUnit, Pest, PHPStan, Rector et Docker

PHPUnit ou Pest pour les tests, PHPStan pour l'analyse statique, Rector pour automatiser les montées de version, Docker pour l'environnement de développement. Ces outils sont présents dans les projets PHP bien tenus, et leur absence donne une idée du chantier à reprendre.

Le poste recouvre des réalités différentes. Sur un produit en développement actif, le développeur full-stack PHP construit des fonctionnalités de bout en bout, de la migration de base à l'écran Vue, et participe aux choix d'architecture. Sur un existant plus ancien, il passe une bonne partie de son temps à monter les versions de PHP et du framework, à ajouter des tests et à corriger des lenteurs. Les deux frameworks se ressemblent sur les principes (routage, ORM, injection de dépendances, files de tâches) mais pas sur les détails. Les certifications Symfony et Laravel attestent la connaissance du framework. La pratique de la production, des montées de version et du front se vérifie en entretien.

Les compétences techniques à contrôler chez un développeur PHP full-stack

  • PHP 8 typé et exécution sous PHP-FPM
  • Symfony : services, Security et Messenger
  • Laravel : Eloquent, policies et files d'attente
  • Doctrine, Eloquent et performance SQL
  • Front Vue.js, Twig ou Livewire et contrat d'API
  • Tests, PHPStan, sécurité et déploiement

Questions d'entretien pour un développeur full-stack PHP

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.

  1. Question 1 · confirmé

    Une page qui liste 50 commandes avec leur client et leurs produits envoie 151 requêtes SQL. Comment le repérez-vous, et comment corrigez-vous avec Doctrine ou Eloquent ?

    Une bonne réponseC'est un problème N+1 : une requête pour la liste, puis des requêtes par commande pour le client et les produits, chargés à la demande. Le profiler Symfony (onglet Doctrine) ou Laravel Debugbar et Telescope montrent le nombre de requêtes. Avec Doctrine, une jointure avec addSelect dans le QueryBuilder charge tout en une passe. Avec Eloquent, with('customer', 'items.product'), et Model::preventLazyLoading() en développement pour lever une exception dès qu'un chargement paresseux se produit.

    Signal d'alerte« On met un cache » ou « on ajoute un serveur », sans savoir combien de requêtes la page envoie.

  2. Question 2 · confirmé

    Sous Symfony, l'envoi d'un email et la génération d'une facture PDF ralentissent la validation de commande. Comment les sortez-vous de la requête ?

    Une bonne réponseAvec Messenger : un message et son handler, un transport asynchrone (Doctrine, Redis ou AMQP) et une règle de routage. Un worker messenger:consume tourne en continu sous Supervisor ou systemd. La stratégie de reprise et un transport des échecs gardent les messages qui n'aboutissent pas. Le handler est idempotent, et les workers sont redémarrés à chaque déploiement avec messenger:stop-workers.

    Signal d'alerteUn exec() qui lance un script en arrière-plan, ou tout dans l'événement kernel.terminate sans reprise possible.

  3. Question 3 · confirmé

    Dans une application Laravel, un utilisateur ne doit modifier que les projets de son équipe. Où placez-vous cette règle ?

    Une bonne réponseDans une policy (ProjectPolicy avec une méthode update), appelée depuis le contrôleur par authorize, par le middleware can ou par l'attribut #[Authorize] de Laravel 13. Le route model binding peut aussi être limité aux projets de l'équipe. Côté Blade, Livewire ou Inertia, on peut masquer le bouton grâce à la même policy, mais c'est le serveur qui refuse. Un test de fonctionnalité vérifie le 403.

    Signal d'alerteUn if dans le template Blade ou le composant Vue, ou la même condition recopiée dans chaque contrôleur.

  4. Question 4 · junior à confirmé

    Qu'ont changé les types stricts, les enums et les propriétés readonly de PHP 8 dans votre façon d'écrire une entité ou un DTO ?

    Une bonne réponsedeclare(strict_types=1) supprime les conversions silencieuses. Les propriétés sont typées, les statuts deviennent des enums adossés à une chaîne, mappés par Doctrine (enumType) ou par un cast Eloquent. Les DTO sont des classes readonly construites avec la promotion des paramètres du constructeur. PHPStan s'appuie sur ces types. Un profil à jour cite aussi les property hooks et la visibilité asymétrique de PHP 8.4.

    Signal d'alerteDes tableaux associatifs qui circulent partout, des statuts en chaînes libres, aucun type sur les propriétés.

  5. Question 5 · confirmé

    Le front Vue.js appelle l'API Symfony ou Laravel et reçoit des erreurs CORS en recette, alors que tout marche en local. Que vérifiez-vous ?

    Une bonne réponseCORS est une règle du navigateur. La personne vérifie que l'origine de recette figure dans la configuration (NelmioCorsBundle, ou config/cors.php sous Laravel), que la requête préalable OPTIONS n'est pas bloquée par le pare-feu de sécurité ou le reverse proxy, et qu'on n'envoie pas de cookies avec une origine générique, combinaison refusée par les navigateurs. En local, le proxy du serveur Vite masquait le problème.

    Signal d'alerte« On désactive CORS », ou une origine générique ajoutée avec l'envoi des cookies.

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

Ce que les recruteurs demandent sur le profil full-stack PHP

Symfony ou Laravel : faut-il exiger le framework de votre équipe ?

Pour un poste confirmé ou senior, c'est préférable, car chacun a ses conventions et ses pièges, comme le flush de Doctrine ou les workers qui gardent l'ancien code en mémoire. Un bon développeur Laravel devient productif sur Symfony en quelques semaines s'il connaît l'injection de dépendances et un ORM. Pour un junior, vérifiez plutôt PHP, SQL et HTTP. Le framework s'apprend sur le poste.

Quelles versions de PHP et de framework attendre sur un CV récent ?

Pour un projet actif en 2026 : PHP 8.3 à 8.5, Symfony 7.4 ou 8.x, Laravel 12 ou 13. Des versions plus anciennes ne disqualifient personne, beaucoup d'applications en production tournent encore sur Symfony 4 ou 5. Demandez alors si la personne a mené une montée de version, comment elle a traité les dépréciations et quels tests la protégeaient. La réponse en dit plus que le numéro affiché.

Que mettre dans le test technique d'un développeur PHP full-stack ?

Un exercice court et réaliste : une page lente à cause de requêtes N+1, un envoi d'email à sortir de la requête, un formulaire Vue qui n'affiche pas les erreurs renvoyées par l'API. La personne corrige en direct et explique ses choix. Prévoyez la version Symfony ou Laravel selon votre stack. Une heure suffit souvent pour voir la lecture du SQL, l'usage des files et le soin apporté aux tests.

Comment vérifier le niveau JavaScript d'un profil venu du PHP ?

Partez du front réellement utilisé dans votre équipe. Pour Vue 3, demandez comment il gère un état partagé avec Pinia, un formulaire qui affiche des erreurs serveur et un appel réseau annulé. Pour du Twig avec Stimulus ou Livewire, vérifiez plutôt qu'il sait limiter les allers-retours avec le serveur. Beaucoup de profils PHP se disent full-stack avec un JavaScript limité à jQuery : une question concrète sur un composant suffit à le voir.

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.

Les fiches voisines

Toutes les fiches →

Voyez Delectus sur vos propres offres.

Commencez gratuitement. Passez à l'échelle quand vous êtes prêt.

Demander une démo

Votre ATS, connecté à Delectus

  • Workable
  • Teamtailor
  • iCIMS
  • Lever
  • SmartRecruiters
  • Jobvite
  • Greenhouse
  • Pinpoint