# Correction Bug 404 - Route /incidents/delete **Date:** 10 novembre 2025 **Problème:** Erreur 404 sur `/incidents/delete` et autres routes POST + Double `/public/` **Statut:** ✅ Corrigé ## Problème Identifié L'erreur 404 se produisait lors de l'appel à `/incidents/delete` et potentiellement d'autres routes POST pour plusieurs raisons : 1. **Incohérence dans Config** : Le `index.php` définissait `$_ENV['app_url']` mais `Config::get()` cherchait dans `self::$data['env']` 2. **Double basePath** : `route_url()` ajoutait `/public/` alors que `Config::baseUrl()` l'incluait déjà 3. **URLs malformées** : Génération d'URLs comme `/public/public/incidents/delete` au lieu de `/public/incidents/delete` ## Solutions Implémentées ### 1. Correction de Config::get('app_url') **Fichier:** `public/index.php` ```php // AVANT: Définissait seulement $_ENV['app_url'] $_ENV['app_url'] = $scheme . '://' . $host . ($script ? $script : ''); // APRÈS: Définit à la fois $_ENV et Config $appUrl = $scheme . '://' . $host . ($script ? $script : ''); $_ENV['app_url'] = $appUrl; Config::set('app_url', $appUrl); // ← Nouvelle ligne ``` **Fichier:** `app/Core/Config.php` - Ajout méthode `set()` ```php public static function set(string $key, $value): void { self::load(); if (!isset(self::$data['env'])) { self::$data['env'] = []; } self::$data['env'][$key] = $value; } ``` ### 2. Correction du double /public/ **Fichier:** `app/helpers.php` ```php function route_url(string $path, array $params = []): string { // Config::baseUrl() retourne déjà https://domain.com/public $baseUrl = rtrim(Config::baseUrl(), '/'); // Construire l'URL finale (baseUrl contient déjà /public) $path = '/' . ltrim($path, '/'); $url = $baseUrl . $path; // ← Pas de $basePath ajouté ici return $url; } ``` **Problème résolu :** - ❌ **AVANT :** `https://maintenance-back.insuite-ci.com/public/public/incidents/delete` - ✅ **APRÈS :** `https://maintenance-back.insuite-ci.com/public/incidents/delete` ## Fonctionnement 1. **URL Générée:** `https://maintenance-back.insuite-ci.com/public/incidents/delete` 2. **Router reçoit:** `/public/incidents/delete` dans `REQUEST_URI` 3. **Router extrait basePath:** `/public` (depuis `SCRIPT_NAME`) 4. **Router cherche:** `/incidents/delete` (après suppression du basePath) 5. **Match réussi:** Route `/incidents/delete` trouvée ✅ ## Fichiers Impactés - ✅ `app/helpers.php` - Fonction `route_url()` corrigée - ✅ `app/Views/incidents/index.php` - Utilise déjà `route_url()` - ✅ `app/Views/incidents/detail.php` - Utilise déjà `route_url()` - ✅ `app/Views/settings/users.php` - Utilise déjà `route_url()` ## Routes Concernées Toutes les routes POST qui utilisaient `route_url()` sont maintenant fonctionnelles : - `/incidents/delete` ✅ - `/users/update` ✅ - `/users/delete` ✅ - `/incidents/assign` ✅ - `/incidents/status` ✅ - `/incidents/comment` ✅ - Etc. ## Test de Vérification Pour tester la correction : 1. Accéder à https://maintenance-back.insuite-ci.com/public/incidents 2. Cliquer sur le bouton "Supprimer" d'un incident avec statut "open" 3. Confirmer dans la modal Bootstrap 4. ✅ L'incident doit être supprimé sans erreur 404 ## Notes Techniques - La fonction `base_url()` reste inchangée (utilisée pour les assets, images, etc.) - La fonction `route_url()` est spécifiquement dédiée aux routes de l'application - Le Router gère automatiquement l'extraction du basePath pour tous les environnements (dev local, production, sous-dossiers)