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 :

Service non trouvé [4.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Par défaut Service non trouvé
    Bonjour,

    Je tente d'utiliser craueformflowbundle pour l'enregistrement d'une annonce via plusieurs formulaires. Pour ce faire, comme l'indique la documentation, j'ai créé un service :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    services:
    ...
        roadtrip.createAdvertFlow:
            class: App\Form\CreateAdvertFlow
            parent: craue.form.flow
            public: true
            autowire: true
            autoconfigure: false
    La classe utilisée par le service se trouve bien dans le répertoire indiqué :

    Nom : Capture.JPG
Affichages : 4462
Taille : 11,9 Ko

    Dans mon controller, j'appelle le service de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        /**
         *  @Route("/road_trip/newAdvert", name="road_trip_createAdvert")
         *  @Route("/road_trip/{id}/editAdvert", name="road_trip_editAdvert")
         */
        public function advertForm() {
            $formData = new Advert(); // Your form data class. Has to be an object, won't work properly with an array.
     
            $flow = $this->get('roadtrip.createAdvertFlow'); // must match the flow's service id
    ...
    Or, lorsque je tente d'appeler cette route, j'ai le message d'erreur suivant :

    Service "roadtrip.createAdvertFlow" not found: even though it exists in the app's container, the container inside "App\Controller\RoadTripController" is a smaller service locator that only knows about the "doctrine", "form.factory", "http_kernel", "parameter_bag", "request_stack", "router", "security.authorization_checker", "security.csrf.token_manager", "security.token_storage", "serializer", "session" and "twig" services.Try using dependency injection instead.
    J'ai lu la documentation concernant la création des services, mais je ne comprends pas mon erreur.

    Quelq'un aurait une idée?

    Merci d'avance pour votre aide.

  2. #2
    Membre Expert

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 583
    Par défaut
    Salut,

    Simple hypothèse
    https://symfony.com/doc/current/service_container.html
    tu fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->get('roadtrip.createAdvertFlow');
    je pense qu'il faut utiliser le container
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $this->container->get('logger');
    Si tu fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    php bin/console debug:container
    tu vois ton service?

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Par défaut
    Merci beaucoup pour ton aide...

    J'avais déjà tenté le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->container->get(''roadtrip.createAdvertFlow');
    , mais j'avais le même message d'erreur.

    J'avais également fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    php bin/console debug:container
    et je n'y avais pas retrouvé mon service...

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    Il ne faut pas récupérer le conteneur directement dans le controlleur (ou ailleurs), il faut injecter le service dont tu as besoin:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function advertForm(App\Form\CreateAdvertFlow $flow)
    {
    //$flow est maintenant disponible ici
    //...
    Par ailleurs, si autowiring est configuré pour tout le contenu de ton conteneur, tu n'as même pas besoin de configurer le service roadtrip.createAdvertFlow, il sera automatiquement ajouté.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Par défaut
    Merci beaucoup pour ton aide.

    En modifiant avec un passage de paramètre tel que tu le proposes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        /**
         *  @Route("/road_trip/newAdvert", name="road_trip_createAdvert")
         *  @Route("/road_trip/{id}/editAdvert", name="road_trip_editAdvert")
         */
        public function advertForm(App\Form\CreateAdvertFlow $flow) {
    ...
    j'obtiens alors l'erreur suivante :

    Service "roadtrip.createAdvertFlow" not found: even though it exists in the app's container, the container inside "App\Controller\RoadTripController" is a smaller service locator that only knows about the "doctrine", "form.factory", "http_kernel", "parameter_bag", "request_stack", "router", "security.authorization_checker", "security.csrf.token_manager", "security.token_storage", "serializer", "session" and "twig" services.Try using dependency injection instead.
    Par ailleurs, je ne comprends pas comment je dois procéder pour que mon service soit automatiquement configuré car, si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        roadtrip.createAdvertFlow:
            class: App\Form\CreateAdvertFlow
            parent: craue.form.flow
    j'ai cette erreur :

    Attribute "autowire" on service "roadtrip.createAdvertFlow" cannot be inherited from "_defaults" when a "parent" is set. Move your child definitions to a separate file or define this attribute explicitly in C:\cmder\roadtrip\config/services.yaml (which is loaded in resource "C:\cmder\roadtrip\config/services.yaml").

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    S'il y a dans ton services.yaml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    _defaults:
            autowire: true      
            autoconfigure: true
    Supprime totalement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    roadtrip.createAdvertFlow:
            class: App\Form\CreateAdvertFlow
            parent: craue.form.flow

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 26/05/2017, 12h25
  2. Création version client - fichiers non trouvés
    Par Pascal dans le forum WinDev
    Réponses: 7
    Dernier message: 03/12/2004, 11h34
  3. [debutant][Classpath][Linux] Classe non trouvée
    Par oghma777 dans le forum Général Java
    Réponses: 5
    Dernier message: 15/10/2004, 21h26
  4. COleDispatchDriver et Afx.h -> LPCSTR non trouvé
    Par Bayard dans le forum C++Builder
    Réponses: 2
    Dernier message: 25/09/2004, 08h42
  5. [Debutant][Install][VS]erreur sur fichier non trouvé.
    Par silvermoon dans le forum DirectX
    Réponses: 4
    Dernier message: 16/07/2004, 20h59

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