<?phpnamespace App\Controller;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;/** * ══════════════════════════════════════════════════════════════════════════ * RACINE DU SITE — `/` * * ⚠️ CETTE MÉTHODE RENVOYAIT UNE 500 SUR CHAQUE VISITE. * * return $this->redirectToRoute('login'); * * Aucune route ne s'appelle `login`. Les noms réels sont `app_login` * (vitrine), `oauth2_login` (serveur d'autorisation) et `backend_login` * (backoffice). `redirectToRoute()` sur un nom inconnu lève * `RouteNotFoundException` — donc 500, dès la page d'accueil, sans que rien * n'indique le nom fautif ailleurs que dans les journaux. * * ── CE QUE FAIT LA RACINE DÉSORMAIS ────────────────────────────────────── * * Ce déploiement sert le backoffice et l'API ; il n'a pas de vitrine Twig. * La racine mène donc à l'administration : * * · déjà connecté en administrateur → tableau de bord * · sinon → formulaire de connexion * * ⚠️ L'API N'EST PAS CONCERNÉE. `/api/*` est servi par son propre pare-feu * (`^/api`, sans état, JWT) et ne passe jamais par ici. Rediriger la racine * ne ferme aucun point d'entrée de l'API. * * ⚠️ Le jour où une vitrine publique est branchée, c'est cette méthode * qu'il faut modifier — et elle seule. * ══════════════════════════════════════════════════════════════════════════ */class HomepageController extends AbstractController{ public function homepage(Request $request): Response { if ($this->isGranted('ROLE_ADMIN')) { return $this->redirectToRoute('backend_dashboard'); } return $this->redirectToRoute('backend_login'); }}