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 :

Création par copy / FormEdit + Form add ? [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 96
    Points : 59
    Points
    59
    Par défaut Création par copy / FormEdit + Form add ?
    Bonjour,

    Je suis face à un problème sur ce framework: Dans mon application, mes controller héritent tous d'un abstractController, qui comprends une méthode Addaction et EditAction, qui traitent de façon transparente tout ajout ou édition d'entité. Or, il faut que je réalise une action copyAction, qui permetterait de créer une nouvelle entité avec un formulaire pré-rempli par une autre entité.
    Donc j'utilise mon Form de mon action editAction, donc j'hydrate le form avec l'objet choisi, puis, au submit, je check si le form est valid et là j'aimerai créer une nouvelle objet à partir de $form-getDatas(), j'ai réussi a faire cela: une nouvelle entité est bien créer (avec un "clone") , mais les modifications sont AUSSI apportées à l'entité qui m'a servi à hydrater le Form.
    Comment faire ? Est-ce une mauvaise direction technique ?

    Merci pour vos réponses.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 168
    Points : 219
    Points
    219
    Par défaut
    Si tu peux poster ton code, il sera plus simple de répondre.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    Si ton formulaire est lié a une entité doctrine, la modification de l'objet est enregistré lors de ton flush. tu dois utiliser la méthode detach() de l'entity manager pour détaché l'objet original du formulaire de doctrine (supprimer la liaison des métadonnées)

  4. #4
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 96
    Points : 59
    Points
    59
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //Creating new item from form Data, and the persisting it.
    $newItem = clone $form->getData(); // TODO ok pour la nouvelle entité mais les modifications sont aussi appliquées à l'ancienne.
    $this->entityService->save($newItem);
    je vais essayer de detach(). Mais j'ai peur que ça explose mon getData() aussi.

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 96
    Points : 59
    Points
    59
    Par défaut
    Bon j'ai résolu mon problème et je poste la réponse, pour ceux qui googliseront ce problème:

    J'ai donc, au lieu de créer une action COPY dans mon controller, qui reprenait potentiellement le début de l'action EDIT, et la FIN de laction ADD (Vous suivez ? Création par copie, donc EDIT pour récupérer les champs de l'object d'origine, mais ADD pour en ajouter un nouveau).
    Il s'avère qu'il est plus simple de modifier l'action ADD, mettre un petit flag pour savoir si on provient d'un objet, et si ce flag est présent, au lieu de créer un tout nouvel objet, et bien on:
    - Clone l'objet qui sort du formulaire (form->getDatas() ),
    - On Set les ID externes de l'objet à NULL, et SON PROPRE ID (surtout) à NULL (donc on conserve toute les autres valeurs (labels, etc, machin),
    - On persiste, on flush c'est good !

    Simple, mais je trouve hallucinant que Doctrine n'est pas prévu ceci. (Il existe une fonction copy() dans la doc de doctrine mais elle en TODO... slow clap).

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

Discussions similaires

  1. création de fichier dbf par interface window form
    Par AntaresJon dans le forum VB.NET
    Réponses: 3
    Dernier message: 30/04/2010, 10h12
  2. Réponses: 3
    Dernier message: 27/04/2006, 09h03
  3. Constructeur par copie et std::list
    Par Captain_JS dans le forum SL & STL
    Réponses: 5
    Dernier message: 13/12/2005, 20h15
  4. [deb.]Constructeur par copie
    Par Marc_3 dans le forum Débuter
    Réponses: 4
    Dernier message: 19/11/2005, 14h33
  5. [C#] Création menu sur fenêtre form
    Par Tips dans le forum Windows Forms
    Réponses: 4
    Dernier message: 10/11/2005, 22h29

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