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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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');

+ 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