Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/06/2011, 15h29   #1
Membre habitué
 
Avatar de Nico_F
 
Homme Nicolas
Développeur Web
Inscription : avril 2011
Messages : 95
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Âge : 24
Localisation : France

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

Informations forums :
Inscription : avril 2011
Messages : 95
Points : 142
Points : 142
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 !
Nico_F est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2011, 15h00   #2
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
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 !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 11h27   #3
Membre habitué
 
Avatar de Nico_F
 
Homme Nicolas
Développeur Web
Inscription : avril 2011
Messages : 95
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Âge : 24
Localisation : France

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

Informations forums :
Inscription : avril 2011
Messages : 95
Points : 142
Points : 142
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...
Nico_F est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 23h56   #4
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
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 !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 10h00   #5
Membre habitué
 
Avatar de Nico_F
 
Homme Nicolas
Développeur Web
Inscription : avril 2011
Messages : 95
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Âge : 24
Localisation : France

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

Informations forums :
Inscription : avril 2011
Messages : 95
Points : 142
Points : 142
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.
Nico_F est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 18h13   #6
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
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 !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 11h38   #7
Membre à l'essai
 
Inscription : décembre 2008
Messages : 49
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 49
Points : 24
Points : 24
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).
mysterty est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h34.


 
 
 
 
Partenaires

Hébergement Web