Maison > Questions et réponses > le corps du texte
J'ai déplacé tous les contrôleurs vers /src/Web/Controller
dans mon projet Symfony 6 comme indiqué ci-dessous
├── src │ ├── ... │ └── Web │ | ├── Controller │ | ├── .... | |── Kernel.php
Mon routes.yaml
modifié en conséquence
#routes.yaml controllers: resource: ../src/Web/Controller/ type: annotation
Maintenant, le problème est que tous mes itinéraires ont un nom préfixé par app_web
. Je pense que c'est dû à cette structure.
$ php bin/console debug:router
Le résultat de la commande est le suivant :
... ... app_web_post_index GET|HEAD ANY ANY /post/ app_web_post_create GET|HEAD|POST ANY ANY /post/create
Ici, je veux seulement que le nom soit post_index
Comment supprimer ce préfixe ?
P粉0116843262024-03-27 12:11:43
Si vous ne nommez pas explicitement l'itinéraire, ils le nommeront pour vous.
Le nom est généré en utilisant les noms complets des classes et méthodes du contrôleur (bien que pour une raison quelconque, il n'y ait pas de dernière partie de l'espace de noms - controller
).
Si vous ne souhaitez pas utiliser le nom généré automatiquement, nommez simplement votre itinéraire vous-même :
#[Route('/post')] class Post { #[Route(path: '/', name: 'post_index', methods: ['HEAD', 'GET'])] public function index(Request $request): Response { return new Response('post index'); } #[Route(path: '/create', name: 'post_create', methods: ['HEAD', 'GET', 'POST'])] public function create(Request $request): Response { return new Response('post create'); } }
À l'aide des options intégrées , vous pouvez ajouter un préfixe à un ensemble d'itinéraires, mais ne le supprimez pas du nom généré automatiquement.
Si cela est vraiment important pour que votre cas d'utilisation se produise "automatiquement", je suppose que vous pourriez créer votre propre chargeur de route, mais je dirais que c'est un peu exagéré. Nommez simplement l'itinéraire de manière appropriée ou utilisez un nom généré automatiquement.
Nommer explicitement les routes est généralement une meilleure idée/pratique, car si vous faites référence au nom de la route ailleurs, il est garanti que le nom restera le même même si vous choisissez de refactoriser le contrôleur dans une structure de code différente.