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 :

Surcharge save() pour embedded form


Sujet :

Symfony PHP

  1. #1
    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 Surcharge save() pour embedded form
    Bonjour,

    Aujourd'hui, j'ai du mal !!! Je cherche à faire un save() sur un form qui en embarque un autre. J'ai une table A, une table B et une table intermédiaire AB avec un champ1 et un champ2 (en plus de A.id et B.id).

    Le form que j'utilise est le form A et j'embarque le formulaire AB dedans pour remplir son champs1 et son champs2 par la même occasion.
    Lorsque je valide mon formulaire, je veux créer un nouvel enregistrement de A et je veux qu'il soit lié à B. Donc j'ai besoin de créer l'entité A, mais également l'entité de liaison AB.

    Dans ce formulaire le problème est : comment faire un save() de AB avec tous ces paramètres (notamment A.id) alors que A n'existe pas encore en BDD (et donc n'a pas d'id).

    J'ai survolé la piste des save(), doSave(), updateObject() etc. qui sont censés gérer ce problème, mais j'avoue m'y être un peu perdu et ne plus retrouver les éléments pour ma situation.

    Merci d'avance !

  2. #2
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Il n'y a pas de solution simple.

    En effet le form sauvegarde d'abord les enregistrements embed avant de le faire pour l'enregistrement principale. Modifier ce fonctionnement reviendrait à remonter très loin dans les objets form et doctrine...

    La solution consiste donc à ce que, à la création, il ne soit pas possible de rajouter des éléments embed. Ce qui n'est pas toujours opportun d'un côté interface et facilité de saisie.

    Si non, tu as la possibilité de travailler avec un form indépendant et les champs qui te sont nécessaire, et de gérer l'ensemble de la sauvegarde "à la main".
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  3. #3
    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
    Citation Envoyé par Michel Rotta Voir le message
    Il n'y a pas de solution simple.
    Ça me blesse ce que tu me dis là ...

    Si je comprends bien ce que tu me suggères : soit je vais fouiller très loin dans les entrailles de symfony pour surcharger ma méthode de sauvegarde, soit je gère ça à la mano.

    Partons du principe que je crée mon formulaire classique A, sans embed. Et que je ne veuille pas nécessairement remplir les champs annexes de ma table intermédiaire. J'aurai donc uniquement mon formulaire classique de A que je peux bind, et valider facilement.

    Le problème initial est le même, je dois toujours lors de cette sauvegarde lier mon A et mon B (l'id de B est défini d'office dans mon processus donc pas de souci de ce coté là). Je vais donc vouloir créer "en cascade" l'entité AB qui va les lier pour ce nouveau A.

    Il y a bien un moyen de surchage du save() qui permette ça n'est-ce pas ?
    C'est cette méthode de faire qui m'échappe malgré en avoir parcouru quelques-unes...

  4. #4
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Jette un œil au code de sauvegarde des form et tu comprendras mieux.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  5. #5
    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
    Oh j'y suis allé une paire de fois et c'est pas ce qu'il y a de plus sexy je te l'accorde.

    Cela dit j'ai réussi à contourner partiellement mon problème. Comme dit précédemment j'ai gardé un formulaire classique, et après le bind, si celui-ci est valide je le save, et je récupère le résultat du save dans une variable. J'ai alors l'objet sauvegardé AVEC l'id en base que je peux alors attribuer à un objet intermédiaire de type AB (même plus besoin de passer par un form) que je save également par la suite. Pour les deux autres champs je les rajouterai manuellement et ferai la validation moi même.

    Je ne sais pas si c'est la manière la plus académique ... mais pour le moment la première partie fonctionne.

  6. #6
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Contournement intéressant...
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 49
    Points : 30
    Points
    30
    Par défaut
    Bonjour,

    Je conseille ahDoctrineEasyEmbeddedRelations qui permet de ne pas réinventer la roue.

    Sinon à coup de embedRelation() et en faisant des unset des champs id si les forms sont new, doctrine gère automatiquement l'ajout (mais pas la suppression, ni la gestion des champs vides etc).

Discussions similaires

  1. [1.x] surcharger save dans model ou form?
    Par floringg dans le forum Symfony
    Réponses: 2
    Dernier message: 13/07/2012, 10h28
  2. [TListColumn] Comment le surcharger notemment pour l'IDE ?
    Par phplive dans le forum Composants VCL
    Réponses: 14
    Dernier message: 25/05/2005, 16h44
  3. variable globale pour plusieurs Form
    Par ced2004 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 05/04/2005, 08h50
  4. Réponses: 7
    Dernier message: 08/01/2005, 13h24
  5. [VB6] Valeur de retour pour une Form
    Par preverse dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/08/2004, 17h16

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