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 :

[Dependency Injection] Problème [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 19
    Points : 16
    Points
    16
    Par défaut [Dependency Injection] Problème
    Bonjour à tous !

    Depuis quelques jours déjà j'essaye de créer mon propre UserProvider pour voir comment ça marche, je me suis heurté au problème apparemment courant de ne pas savoir utiliser Doctrine en dehors des contrôleurs.

    J'ai donc du passer par un service container en lui injectant doctrine, jusque là aucun problèmes ma classe se lance bien et l'objet doctrine est récupéré sans problèmes.

    J'ai donc créé un deuxième service, sensé instancier le premier et l'utiliser. En gros mon UserProvider est un service à qui j'injecte mon service LDAP, lui même disposant de doctrine.

    Voici mon services.yml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    services:
        sikwan_provider:
            class: Sikwan\SikwanSecurityBundle\Security\User\SikwanUserProvider
            arguments: [@sikwan_ldap]
        sikwan_ldap:
            class: Sikwan\SikwanSecurityBundle\Security\Ldap\Ldap
            arguments: [@doctrine.orm.entity_manager]
    L'injection de Doctrine se fait très bien, et je récupère l'objet dans mon constructeur :
    Ldap.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public function __construct($doctrine) {
        $this->doctrine = $doctrine;
    }
    Par contre l'erreur suivante apparaît sur mon formulaire de login :
    Catchable Fatal Error: Argument 1 passed to Sikwan\SikwanSecurityBundle\Security\Ldap\Ldap::__construct() must be an instance of Doctrine, none given, called in /var/www/testLdap/src/Sikwan/SikwanSecurityBundle/Security/User/SikwanUserProvider.php on line 14 and defined in /var/www/testLdap/src/Sikwan/SikwanSecurityBundle/Security/Ldap/Ldap.php line 7
    Pourtant j'utilise le même principe que dans l'aure fichier, et si je soumet le formulaire je n'ai aucune erreur.
    SikwanUserProvider.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public function __construct($ldap) {
    		$this->ldap = $ldap;		
    	}
    J'en conclu que mes services fonctionnent, mais que ma page de login fait l'appel sans doctrine (alors que cette page seule ne nécessite pas que les services soient actifs).

    Quelqu'un a une idée ?

  2. #2
    Inscrit
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 476
    Points
    476
    Par défaut
    Etrange je vois pas la. La ligne 14 c'est celle de ton construct ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    Oui désolé je n'ai pas mis toute la classe pour pas faire trop long mais ça rend l'erreur un peu nulle

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    Oups je viens de trouver une solution à mon problème, il semblerait en fait qu'une de mes lignes soit dépréciée.

    Passer doctrine comme paramètre doit se faire de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sikwan_ldap:
            class: Sikwan\SikwanSecurityBundle\Security\Ldap\Ldap
            arguments: [@doctrine]
    Et ensuite on récupère le bon entity manager.

    Cette correction a fait disparaître l'erreur !

  5. #5
    Inscrit
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 476
    Points
    476
    Par défaut
    Tu as vu ca ou ?
    Ca m'intéresse parce que j'utilise doctrine.entity_manager partout moi !

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

Discussions similaires

  1. unity dependency injection
    Par clodo13 dans le forum Design Patterns
    Réponses: 0
    Dernier message: 25/06/2012, 14h37
  2. Réponses: 2
    Dernier message: 26/04/2012, 14h12
  3. DIP (Dependance Injection Principles)
    Par topolino dans le forum ASP.NET
    Réponses: 4
    Dernier message: 23/02/2012, 13h08
  4. [1.x] Dependency Injection dans le modèle
    Par jekif dans le forum Symfony
    Réponses: 2
    Dernier message: 22/02/2012, 11h50
  5. dependency injection dao Jpa
    Par allstar dans le forum JPA
    Réponses: 1
    Dernier message: 16/01/2010, 03h12

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