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 :

création service argument doctrine [2.x]


Sujet :

Symfony PHP

  1. #1
    Rédacteur
    Avatar de Viduc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    1 445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2009
    Messages : 1 445
    Billets dans le blog
    2
    Par défaut création service argument doctrine
    Bonjour

    je souhaite créer un service et utiliser doctrine dans ce service

    j'ai mis dans mon fichier services.yml ceci:

    parameters:
        dsi_main.log.class: DSI\MainBundle\Service\GestionLog
    
          
    services:
        dsi_main.log:
            class: %dsi_main.log.class%
            arguments: [@doctrine]
    
    NetBeans me signal une erreur du type:

    ScannerException while scanning for the next token we had this found character @(64) that cannot start any token
    donc sûrement lié à l'@ de doctrine...

    voici ma class service:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    <?php
    //=================================================================//
    //== DSI-MainBundle - Système de Gestion DSI Université Stendhal ==//
    //==                Viduc 2012 - viduc@sugarbox.fr               ==//
    //==     Pôle Développement - tristan.fleury@u-grenoble3.fr      ==//
    //=================================================================//
     
    // Cette class est un service. Il permet d'accéder à la gestion des logs depuis n'importe quelle class
    // Utilise un objet entity Log
     
     
    namespace DSI\MainBundle\Service;
    use DSI\MainBundle\Entity\Log;
    use Doctrine\Bundle\DoctrineBundle\Registry;
     
    class GestionLog
        {
        /**
         * @var Symfony\Bundle\DoctrineBundle\Registry
         */
        protected $doctrine;
        protected $em; // EntityManager
        protected $log; // class Entity Log.php
     
        /**
         * Constructeur de la class
         */
        public function __construct(Registry $doctrine)
            {
            $this->doctrine = $doctrine;
            // Récupération de l'EntityManager
            $this->em = $this->doctrine->getEntityManager();
            // Génération de l'objet ENtity Log
            $this->log = new Log();
            }
     
        /**
         * Fonction d'enregistrement des logs
         * @param $user le login de l'utilisateur qui fait l'action
         * @param $objet l'objet sur lequel porte l'action
         * @param $desclog la description de l'action
         */
        public function saveLog($user,$objet,$desclog)
            {
            $this->log->setUser($user);
            $this->log->setObjet($objet);
            $this->log->setLog($desclog);
            $this->em->persist($log);
            $this->em->flush(); 
            }
        }
    ?>
    quand je lance mon test voici ce que j’obtiens:

    Catchable Fatal Error: Argument 1 passed to DSI\MainBundle\Service\GestionLog::__construct() must be an instance of Doctrine\Bundle\DoctrineBundle\Registry, instance of Symfony\Bundle\DoctrineBundle\Registry given, called in /Synfony-Cache/dsiweb/cache/dev/appDevDebugProjectContainer.php on line 327 and defined in /MOUNT/STOCKAGE/WORKPLACE/Dsi-Symfony/src/DSI/MainBundle/Service/GestionLog.php line 28
    j'ai déjà eu ce pb avec l'@ mais je ne sais pas si l'erreur vient de la ou pas...

  2. #2
    Membre émérite
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Par défaut
    Bonsoir,

    Je ne suis pas expert dans la création des services au format yml, mais de ce que je vois tu souhaites récupérer doctrine pour avoir accès à l'entity manager.

    Pourquoi ne pas injecter directement l'entity manager ?

  3. #3
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    Bonjour,
    "atchable Fatal Error: Argument 1 passed to DSI\MainBundle\Service\GestionLog::__construct() must be an instance of Doctrine\Bundle\DoctrineBundle\Registry, instance of Symfony\Bundle\DoctrineBundle\Registry given, called in /Synfony-Cache/dsiweb/cache/dev/appDevDebugProjectContainer.php on line 327 and defined in /MOUNT/STOCKAGE/WORKPLACE/Dsi-Symfony/src/DSI/MainBundle/Service/GestionLog.php line 28"
    l'erreur est explicite, tu as probablement suivi l'autocomplétion fourni par netbeans, le problème est qu'il y a plusieurs classes lié à Doctrine ayant le nom "Registry".

    essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    namespace DSI\MainBundle\Service;
    use DSI\MainBundle\Entity\Log;
    use Symfony\Bundle\DoctrineBundle\Registry;
    pour y voir plus clair dans les services:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    app/console container:debug

  4. #4
    Rédacteur
    Avatar de Viduc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    1 445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2009
    Messages : 1 445
    Billets dans le blog
    2
    Par défaut
    Bonjour et merci pour vos réponses.

    En faite non je n'utilise pas l’auto-complétion de Netbeans, je me suis appuyé sur un article trouvé.

    J'ai bien regardé la liste des services via la console, pour doctrine je trouve:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    doctrine                                         container Symfony\Bundle\DoctrineBundle\Registry
    J'ai testé avec entity manager (en rajoutant l'accès à la class)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    doctrine.orm.default_entity_manager              container Doctrine\ORM\EntityManager
    j'obtiens toujours le même type de massage:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Catchable Fatal Error: Argument 1 passed to DSI\MainBundle\Service\GestionLog::__construct() must be an instance of Doctrine\ORM\EntityManager, none given, called in /Synfony-Cache/dsiweb/cache/dev/appDevDebugProjectContainer.php on line 327 and defined in /MOUNT/STOCKAGE/WORKPLACE/Dsi-Symfony/src/DSI/MainBundle/Service/GestionLog.php line 29

  5. #5
    Membre émérite
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Par défaut
    Bonjour,

    Quelle est la version de Symfony2 ?

    Parcequ'en 2.1 la commande container:debug donne
    Doctrine\Bundle\DoctrineBundle\Registry et pas l'emplacement que tu donnes.

    Vides le cache ? voir supprime le.

    Comment récupère tu ta classe ?




    Citation Envoyé par Viduc Voir le message
    Bonjour et merci pour vos réponses.

    En faite non je n'utilise pas l’auto-complétion de Netbeans, je me suis appuyé sur un article trouvé.

    J'ai bien regardé la liste des services via la console, pour doctrine je trouve:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    doctrine                                         container Symfony\Bundle\DoctrineBundle\Registry
    J'ai testé avec entity manager (en rajoutant l'accès à la class)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    doctrine.orm.default_entity_manager              container Doctrine\ORM\EntityManager
    j'obtiens toujours le même type de massage:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Catchable Fatal Error: Argument 1 passed to DSI\MainBundle\Service\GestionLog::__construct() must be an instance of Doctrine\ORM\EntityManager, none given, called in /Synfony-Cache/dsiweb/cache/dev/appDevDebugProjectContainer.php on line 327 and defined in /MOUNT/STOCKAGE/WORKPLACE/Dsi-Symfony/src/DSI/MainBundle/Service/GestionLog.php line 29

  6. #6
    Rédacteur
    Avatar de Viduc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    1 445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2009
    Messages : 1 445
    Billets dans le blog
    2
    Par défaut
    je suis en Symfony version 2.0.16

    j'ai vidé la cache plusieurs fois et toujours pareil...

    je récupère mon service comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            // Récupération du service Log
            $this->log = $this->container->get('dsi_main.log');

  7. #7
    Membre émérite
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Par défaut
    Bonsoir,

    La version explique les différences de namespace des classes doctrine

    Par contre je viens faire ton test de service en 2.0.16 et ça fonctionne.

    Supprime complétement le répertoire dev et prod qui sont dans app/cache

    Je mets mon fichier mais en xml pour la création du service.
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <service id="acme.demo.log" class="Acme\DemoBundle\Service\GestionLog">            
        <argument type="service" id="doctrine.orm.entity_manager"/>
    </service>

  8. #8
    Membre émérite
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Par défaut
    Allez j'ai poussé le vice pour mon apprentissage personnel, et ça fonctionne aussi.

    Donc suprrime ton cache complement voir recharge les vendors.

    parameters:
    my_log.class: Acme\DemoBundle\Service\GestionLog
    services:
    acme_demo.log:
    class: "%my_log.class%"
    arguments: [@doctrine.orm.entity_manager]
    PS : je te confirme bien que netbeans n'est pas content avec le @ mais bon ça fonctionne

  9. #9
    Rédacteur
    Avatar de Viduc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    1 445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2009
    Messages : 1 445
    Billets dans le blog
    2
    Par défaut
    ok ça fonctionne avec EntityManager et non Doctrine, ça me va comme ça en effet je voulais utiliser essentiellement EM ...

    Merci bien!

  10. #10
    Membre émérite
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Par défaut
    J'ai essayé avec le service doctrine et ça fonctionne aussi ... Tant mieux que tu aies trouvé ta solution

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

Discussions similaires

  1. [Débutant] WCF RIA Services - Pb création service de domaine
    Par mumu27 dans le forum Windows Communication Foundation
    Réponses: 7
    Dernier message: 19/11/2013, 10h28
  2. Réponses: 1
    Dernier message: 25/08/2013, 01h02
  3. Réponses: 1
    Dernier message: 23/11/2009, 16h52
  4. création services web
    Par Nayra dans le forum Services
    Réponses: 0
    Dernier message: 02/07/2008, 18h49
  5. Problème création service RMI
    Par Rayndell dans le forum Services Web
    Réponses: 5
    Dernier message: 11/05/2007, 15h14

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