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

Doctrine2 PHP Discussion :

Les entity listeners, comment les utiliser ?


Sujet :

Doctrine2 PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 7
    Par défaut Les entity listeners, comment les utiliser ?
    Bonjour,

    Doctrine 2.4 introduit quelque chose de sympa, les Entity listeners, qui écoutent une entité en particulier.

    Par contre je n'ai pas idée de comment les utiliser. J'ai doctrine 2.4 RC3.

    Premier problème, l'annotation pour déclarer le listener dans l'entité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    namespace MyProject\Entity;
     
    /** @Entity @EntityListeners({"UserListener"}) */
    class User
    {
        // ....
    }
    J'ai beau essayé dans tous les sens, rien qui marche;

    ensuite, si ce problème se règle, je ne sais pas où enregistrer le listener (car apparemment il faut l'enregistrer, si on utilise un constructeur perso pour intégrer des services, je suis pas sur de bien comprendre la doc). Ou iraient ces lignes là ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // register a entity listener.
    $listener = $container->get('user_listener');
    $em->getConfiguration()->getEntityListenerResolver()->register($listener);
    Merci d'avance

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 7
    Par défaut
    Il semblerait en fait que j'ai confondu deux packages doctrine, et je suis en 2.3 sur le paquet concerné :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ composer.phar show doctrine/orm
    > source   : [git] https://github.com/doctrine/doctrine2.git 2.3.4
    J'hésite à passer à la 2.4 RC1, ça me parait pas assez stable pour mon projet

  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,
    Premier problème, l'annotation pour déclarer le listener dans l'entité :
    <?php
    namespace MyProject\Entity;

    /** @Entity @EntityListeners({"UserListener"}) */
    class User
    {
    // ....
    }
    Si tu es sur Symfony, il faut probablement mettre @ORM\Entity

    J'hésite à passer à la 2.4 RC1, ça me parait pas assez stable pour mon projet
    C'est effectivement probablement instable, non documenté et mal intégré à Symfony.
    De toute façon tu peux faire la même chose avec le système actuel, il suffit de tester la classe de l'entité ( " if ($entity instanceof Product) { ")
    http://symfony.com/doc/current/cookb...bscribers.html

    Ca parait évidemment moins optimisé (c'est peut-être la raison de cette nouvelle fonctionnalité), mais c'est stable.
    De plus tu peux certainement isoler tes traitements dans des services qui suivent la signature des EntityListener et appeler ces mêmes services par le biais d'une listener global, qui s'occupera de dispatcher vers tes différents services "EntityListener".

    Une fois que la 2.4 sera stable et intégré dans Symfony, il faudra juste modifier la config de tes services et de ton mapping pour utiliser la nouvelle fonctionalité.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 7
    Par défaut
    Salut,

    oui j'avais tenté de rajouter le ORM, mais comme de toute façon la classe n'existait pas dans ma version de doctrine ORM, j'avais peu de chance d'y arriver,

    Plus que pour des questions de performances, je trouve ça beaucoup plus clair de découpler les listeners par entités, et les arguments passés aux entity listeners me semblaient plus pertinents, car j'ai du mal à comprendre la logique des evenements doctrine (je vais ouvrir un sujet de ce pas)

Discussions similaires

  1. A quoi servent les Callbacks et les Entity Listeners ?
    Par naf87 dans le forum Persistance des données
    Réponses: 11
    Dernier message: 08/05/2013, 16h12
  2. Réponses: 2
    Dernier message: 14/11/2008, 15h11
  3. Les index Firebird, comment les utiliser dans les IBX?
    Par badilou dans le forum Connexion aux bases de données
    Réponses: 1
    Dernier message: 31/05/2008, 23h02
  4. [WSS 3.0] Où sont les données et comment les bouger ?
    Par fanatek dans le forum SharePoint
    Réponses: 5
    Dernier message: 15/01/2008, 15h10
  5. Où trouver les modules et comment les installer ?
    Par Ecosmose dans le forum NetBeans
    Réponses: 17
    Dernier message: 01/06/2007, 18h37

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