IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

[6.4][DependencyInjection] Override de services


Sujet :

Symfony PHP

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2023
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2023
    Messages : 14
    Par défaut [6.4][DependencyInjection] Override de services
    Bonjour,

    Je teste l'override de services sur Symfony comme on peut le voir au début de cette doc doc: Service decoration.

    Pour se faire, je crée deux services:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    namespace App\Service;
     
    class ShowNumberOne
    {
        public function show(): string
        {
            return 'NumberOne: 1';
        }
    }
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    namespace App\Service;
     
    class ShowNumberTwo
    {
        public function show(): string
        {
            return 'NumberTwo: 2';
        }
    }
    Et je met à jour le config/services.yaml en ajoutant ces deux lignes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    App\Service\ShowNumberOne: ~
     
    App\Service\ShowNumberOne:
        class: App\Service\ShowNumberTwo
    Egalement, j'ajoute cette route dans mon controller WelcomeController.php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #[Route('/welcome/show-number', name: 'welcome_show_number')]
    public function welcomeShowNumber(
        ShowNumberOne $showNumberOne,
    ): Response
    {
        $result = $showNumberOne->show();
     
        return new Response($result);
    }
    Lorsque je teste la route, l'override ne fonctionne pas et j'ai cette erreur:

    The exception message is App\Controller\WelcomeController::welcomeShowNumber(): Argument #1 ($showNumberOne) must be of type App\Service\ShowNumberOne, App\Service\ShowNumberTwo given
    Voyez vous ce qu'il ne va pas s'il vous plaît?

    Merci par avance,

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2022
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2022
    Messages : 310
    Par défaut
    L'erreur ne vient pas de la ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    App\Service\ShowNumberOne: ~
     
    App\Service\ShowNumberOne:
        class: App\Service\ShowNumberTwo

  3. #3
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 431
    Par défaut
    Bonjour,

    Tu ne sembles pas consulter la bonne documentation, regarde ce lien pour choisir le service depuis la configuration : https://symfony.com/doc/current/serv...ecific-service
    Utilise une interface dans ton contrôleur si tu ne veux pas y définir la classe finale de ton service.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2023
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2023
    Messages : 14
    Par défaut
    Bonjour,

    @Gabi
    En fait, j'ai regardé cet exemple de la doc pour le tester:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    # config/services.yaml
    services:
        App\Mailer: ~
     
        # this replaces the old App\Mailer definition with the new one, the
        # old definition is lost
        App\Mailer:
            class: App\NewMailer
    @Pytet
    Ce que je ne comprends pas c'est qu'en suivant bien à la lettre la doc, c'est à dire en faisant l'override de services et en updatant la config comme ça comme ci-dessus, ça devrait marcher:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    services:
        App\Service\ShowNumberOne: ~
     
        App\Service\ShowNumberOne:
            class: App\Service\ShowNumberTwo
    Techniquement, ShowNumberOne est overridé par ShowNumberTwo. Du coup, lorqu'on utilise le service ShowNumberOne, il doit appeler ShowNumberTwo. J'ai pourtant suivant l'exemple du Mailer de la doc. Après concernant l'interface dans le controller, je connais ça fonctionne bien. Mais du coup, l'exemple de la doc avec le Mailer, est il faux stp?

Discussions similaires

  1. Quel est l'intérêt des Services Web ??
    Par silvermoon dans le forum Débats sur le développement - Le Best Of
    Réponses: 19
    Dernier message: 12/02/2003, 22h28
  2. naming service
    Par manuel dans le forum CORBA
    Réponses: 6
    Dernier message: 09/12/2002, 17h43
  3. [VB6] Lancer un service, par exemple Sql Server
    Par fea dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 16/10/2002, 14h07
  4. develloppement avec ORBit: service d'evenement
    Par belmontv dans le forum CORBA
    Réponses: 3
    Dernier message: 06/06/2002, 22h56
  5. Service de nommage java C++
    Par Anonymous dans le forum CORBA
    Réponses: 3
    Dernier message: 15/04/2002, 12h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo