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 :

Doctrine listener, mapped superclass et AppBundle [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2013
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2013
    Messages : 71
    Points : 84
    Points
    84
    Par défaut Doctrine listener, mapped superclass et AppBundle
    Bonjour,

    J'utilise une mapped superclass appelée BaseEntity pour la quasi totalité des entités des différents bundles de mon projet afin d'avoir systématiquement des champs comme "is_active", "created_at", "created_by", ...

    Pour mes premiers essais de mise à jour automatique de ces champs, j'ai essayé un lifecycle-callback dans la description de l'entité qui appelle un prePersist. Tout cela était nickel par exemple pour mettre à jour le created_at et ça fonctionne parfaitement. Par contre, pour le created_by, il faut que je passe le $user actuel à la fonction prePersist mais cela n'est pas prévu dans le lifecycle callback. Qu'à cela ne tienne, je sais que je peux faire un listener. C'est un peu plus long mais ça correspond il me semble à ce que je veux faire.

    J'ai mis ma superentité dans le AppBundle car j'ai bien l'intention d'utiliser ce bundle "par défaut" pour les choses communes à mes autres bundles (la super entité, le layout, ...). Mais je m'aperçois que ce bundle ne fonctionne pas vraiment comme les autres. Par exemple, si je pose un fichier Resources/config/services.xml, il est complètement ignoré. J'ai rajouté un dossier dependyInjection avec un fichier configuration.php et un AppExtension.php mais ces fichiers sont aussi complètement ignorés même si ils comportent des parse error énormes. Déjà, si vous avec des indications pour corriger ce problème, ça m'intéresse.

    Qu'à cela ne tienne également, en attendant, je décide de déclarer mon listener dans le fichier app/config/services.yml comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    parameters:
        AppBundle.entity.BaseEntity.class: AppBundle\Listener\BaseEntityListener
     
    services:
        App.BaseEntity.listener:
            class: %AppBundle.entity.BaseEntity.class%
            arguments: { name: doctrine.event_listener, event: prePersist }
    Mon listener se trouve bien dans le dossier spécifié et pourtant, même avec un parse error énorme, il n'est pas non plus appelé même en cas de mise à jour d'une entité "fille" de la mapped superclass BaseEntity. Curieusement, si je fais le même Listener (à peu de choses près, en l'adaptant au contexte bien sûr) dans un de mes bundles, il est bien appelé grâce au fichier services.xml qui va bien et si j'ai le malheur d'y mettre volontairement un parse error, Symfony me le fait remarquer immédiatement ce qui me laisse croire que ce AppBundle est décidément un bundle pas comme les autres.

    Je m'aperçois également que, si dans mon fichier app/config/services.yml je change le nom de la classe par un nom qui n'existe pas, symfony ne bronche même pas alors que j'ai déjà galéré pour simplement des problèmes d'espace ce que je trouve étonnant.

    Bref, au final, comment gérer ce genre de mise à jour automatique sachant que (et ça c'est facile à faire) je ne souhaite pas être obligé pour chacune de mes entités, de faire la mise à jour d'un tel champ explicitement.

  2. #2
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    C'est quoi ta question ?

    Tu veux résoudre tes problème de configuration du DI ou bien tu veux apprendre à faire un entity listener correctement ?

  3. #3
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2013
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2013
    Messages : 71
    Points : 84
    Points
    84
    Par défaut
    Au final, tout fonctionne correctement.

    J'ai mis à jour symfony et je pense que mes problèmes venaient du cache... j'aurai du le vider avant de poster... désolé. :/

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

Discussions similaires

  1. [2.x] Requête doctrine s'exécutant 4 fois dans un listener
    Par Marcuss57 dans le forum Symfony
    Réponses: 2
    Dernier message: 25/08/2014, 00h45
  2. Réponses: 10
    Dernier message: 22/05/2012, 15h54
  3. [2.x] php app/console doctrine:mapping:convert --from-database
    Par aitiahcene dans le forum Symfony
    Réponses: 0
    Dernier message: 25/04/2012, 13h40
  4. Doctrine et Mapping
    Par Feesh dans le forum Doctrine2
    Réponses: 2
    Dernier message: 01/08/2011, 16h58
  5. [Doctrine] Le framework de mapping objet-relationnel pour PHP
    Par fattum dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 19/03/2010, 13h23

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