|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Nouveau Membre du Club
![]() Étudiant Inscription : août 2006 Messages : 49 ![]() |
Bonjour,
J'ai un formulaire dont je surcharge la méthode save() pour effectuer un traitement des données : ou bien un objet similaire existe déjà dans la table (comparaison sur quelques champs) et alors on met à jour l'entrée existante, ou bien cette recherche ne retourne aucun objet similaire et on l'ajoute à la base. Je pourrais donc me contenter d'un (en pseudo-code) : Code :
Bref je voulais savoir si vous connaissiez une manière propre de le faire (peut-être en dehors de save() du coup) ou si mon update séparé du départ reste la meilleure solution même si elle ne passe plus par parent::save(). |
||
|
|
00
|
|
|
#2 | ||
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
A vue de nez, et sans avoir creuser la solution.
Ta proposition me semble raisonnable et très dans le style de framework. Par contre, elle ne me semble pas du tout coller avec le modèle objet de Doctrine et donc me semble irréalisable. En effet, dans l'idée de Doctrine, tu prends un objet dans la base (ou tu en crée un nouveau), tu y apportes les modifications nécessaires et tu sauvegardes (que se soit un nouveau ou un ancien). Hors toi tu voudrais partir d'un objet "indéfini" qui devra choisir sa manière d'exister, soit je suis nouveau, soit je me sauvegarde, tu vas donc largement à l'encontre du fonctionnement intrinsèque de Doctrine. Je pense que le plus simple sera, dans ton contrôleur, de vérifier avant de charger l'objet doctrine. En pseudo code, dans le contrôleur, cela va donner : Code Pseudocode :
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
||
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Étudiant Inscription : août 2006 Messages : 49 ![]() |
De ce que tu me dis, je comprends que si on crée un objet (par défaut dans mon cas), Doctrine n'utilise pas la même classe d'objet que si on le modifie, c'est bien ça ? Du coup pas de méthode/valeur possiblement modifiable pour passer de l'un à l'autre et nécessité de déclarer ce que l'on veut faire à l'instanciation. J'ai bon ?
Le hic, c'est que je ne peux pas le définir à la création du formulaire : des objets existent, l'utilisateur donne des informations valides pour créer un objet, cet objet peut faire partie des objets existants, ou pas. Du coup, peut-être effectivement un test lors de l'action Create correspondante et définir $this->form en fonction (à la manière du $this->forward404Unless() que l'on retrouve classiquement dans les éditions d'objet). |
|
|
00
|
|
|
#4 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Non, ce que je dis c'est qu'un objet Doctrine correspond à un enregistrement précis. Pas soit l'un soit l'autre. Du moins pas facilement et ce n'est pas le comportement prévu.
Mais tu peux parfaitement faire, avec un peu de travail en plus, un form non lié à doctrine, l’alimenter, le récupérer, vérifier les saisie, décider ce que tu fais des données, soit récupérer soit nouveau, mettre les données et enregistrer. Tu pourrais probablement créer une classe dans le genre de la sfFormDoctrine qui va gérer cela directement, mais si tu n'as qu'un form à gérer je pense que c'est une perte de temps. Plus propre (quoique) mais beaucoup plus long, sauf si tu connais parfaitement la structure des objets form.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
Copyright © 2000-2012 - www.developpez.com