recherche

Maison  >  Questions et réponses  >  le corps du texte

Routage nommé dans Symfony 6 utilisant le contrôleur du répertoire interne

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.yamlmodifié 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粉511749537P粉511749537248 Il y a quelques jours460

répondre à tous(1)je répondrai

  • P粉011684326

    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.

    répondre
    0
  • Annulerrépondre