fix: une adresse inconnue du back-office et une erreur serveur affichent une page lisible au lieu de JSON brut #190

Merged
Corentin merged 3 commits from fix/backoffice-html-errors into dev 2026-09-28 12:45:15 +02:00
Owner

Pourquoi

En capturant les vraies reponses de chaque route, deux reponses du back-office sont apparues en JSON brut : une adresse inconnue (/admin/nope -> {"data":null,"error":{"code":"NOT_FOUND"...}}) et une erreur serveur. Un equipier qui suit un lien mort voyait du JSON.

Ce qui change

  • App\Core\ErrorResponse choisit le format selon la surface : l'API (/api, /admin/api, /admin/me) garde l'enveloppe JSON, inchangee ; le back-office recoit une page HTML (« Page introuvable », « Action impossible », « Une erreur est survenue »), avec un lien vers le tableau de bord et la connexion.
  • La page ne reprend jamais l'adresse demandee et ne montre le message d'une exception qu'en mode debogage, echappe.
  • Un GET vers une adresse qui n'existe qu'en envoi de formulaire (ex. /admin/products/1) affiche aussi « Page introuvable » ; le code HTTP reste 405.
  • Utilisee par le routeur (404, 405) et par le controleur frontal (500).
  • Capture des reponses refaite : le trajet de la page Sante montre ces nouvelles pages.

Verification

  • 7 tests ecrits avant le code (6 ErrorResponseTest, 1 RouterTest), rouges puis verts. Suite PHP : 2373 tests, 7851 assertions, 0 echec ; PHPStan propre.
  • Navigateur, pile jetable : admin-error-pages.spec.js (page lisible, sans JSON, axe-core 0 violation ; API toujours en JSON), trajet et balayage : 19 scenarios sur 19, balayage 4807 verifications, 0 echec.
  • Capture : 157 succes sur 157, 667 refus sur 685, 0 secret ; CapturedResponsesTest vert.
  • gitleaks sur un clone : aucune fuite.
## Pourquoi En capturant les vraies reponses de chaque route, deux reponses du back-office sont apparues en JSON brut : une adresse inconnue (`/admin/nope` -> `{"data":null,"error":{"code":"NOT_FOUND"...}}`) et une erreur serveur. Un equipier qui suit un lien mort voyait du JSON. ## Ce qui change - `App\Core\ErrorResponse` choisit le format selon la surface : l'API (`/api`, `/admin/api`, `/admin/me`) garde l'enveloppe JSON, inchangee ; le back-office recoit une page HTML (« Page introuvable », « Action impossible », « Une erreur est survenue »), avec un lien vers le tableau de bord et la connexion. - La page ne reprend jamais l'adresse demandee et ne montre le message d'une exception qu'en mode debogage, echappe. - Un `GET` vers une adresse qui n'existe qu'en envoi de formulaire (ex. `/admin/products/1`) affiche aussi « Page introuvable » ; le code HTTP reste 405. - Utilisee par le routeur (404, 405) et par le controleur frontal (500). - Capture des reponses refaite : le trajet de la page Sante montre ces nouvelles pages. ## Verification - 7 tests ecrits avant le code (6 `ErrorResponseTest`, 1 `RouterTest`), rouges puis verts. Suite PHP : 2373 tests, 7851 assertions, 0 echec ; PHPStan propre. - Navigateur, pile jetable : `admin-error-pages.spec.js` (page lisible, sans JSON, **axe-core 0 violation** ; API toujours en JSON), trajet et balayage : 19 scenarios sur 19, balayage 4807 verifications, 0 echec. - Capture : 157 succes sur 157, 667 refus sur 685, 0 secret ; `CapturedResponsesTest` vert. - gitleaks sur un clone : aucune fuite.
docs: capture refaite avec les pages d'erreur du back-office, journal à jour
All checks were successful
CI / secret-scan (pull_request) Successful in 29s
CI / php-lint (pull_request) Successful in 32s
CI / static-tests (pull_request) Successful in 2m52s
CI / js-tests (pull_request) Successful in 45s
CI / shell-tests (pull_request) Successful in 11s
CI / secret-scan (push) Successful in 26s
CI / php-lint (push) Successful in 27s
CI / static-tests (push) Successful in 2m46s
CI / js-tests (push) Successful in 44s
CI / shell-tests (push) Successful in 7s
88aee41b2f
Corentin deleted branch fix/backoffice-html-errors 2026-09-28 12:45:15 +02:00
Sign in to join this conversation.
No reviewers
No labels
auto-merge
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
AcadeNice/corentin_wakdo!190
No description provided.