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 :

Formulaire avec symfony


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Par défaut Formulaire avec symfony
    Salut à tous,

    J'ai un soucis lors de la création d'un formulaire avec symfony, j'ai une table avec mettons les champs "champ1", "champ2" et "champ3" et j'ai généré le formulaire en fonction du schema de ma table.
    Dans mon formulaire je fais apparaitre les widgets liés à "champ1" et "champ2" et je rajoute 2 widgets ( nommons les champ3-A et champ3-B ) qui ne sont pas liés à la table.
    champ3-A et champ3-B ne sont pas dans le schema de la table car leurs nombres et types sont susceptibles de varier ( la j'en ai mit 2 mais il pourrait y en avoir 3, 4 ou plus )

    J'aimerais pouvoir faire lors de l'enregistrement champ3 = array(champ3-A, champ3-B) mais je ne sais pas dans quelle fonction et comment le faire.

    Merci de votre aide

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Par défaut
    J'ai réussi en rajoutant ce code dans le processForm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $var = $form->save();
    $var ->setChamp3(serialize(array("A" => $form->getValue('A'))));
    $var ->save();
    Je sais pas si il y a plus propre ...

  3. #3
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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
    Par défaut
    Ce n'est pas très simple, mais si tu suis bien le modèle objet cela ne devrait pas être trop compliquer.

    Tu as deux options, soit tu parts sur le formulaire de base sfFormSymfony, qui n'est pas lié à la base de donnée, là, très simple, tu définis ton formulaire dans la méthode configure(), puis, une fois le forumlaire instancié, tu récupères l'enregistrement et donne les valeurs aux widgets définis (setValue() ) une fois le formulaire revenu et validé ( isValid() ) il ne reste plus qu'à récupérer les valeurs ( getValue() ) et mettre l'enregistrement à jour. Basic mais efficace.

    Une autre méthode, moins basic et plus "propre".

    Dans l'objet form il faut modifier la méthode configure() pour y mettre les widgets dont tu as besoins. Non nécessairement lié à l'objet du modèle. Je ne sais pas comment du définis l'apparence des widgets, a toi de voir. Par contre, il faut absolument définir les validator qui vont avec, sous peine de ne pas pouvoir valider le formulaire au retour. Tu places les données avec un setDefault pour chaque widget. Voilà pour la partie préparation et la partie validation.

    Pour la partie enregistrement pas contre, je ne suis pas entièrement sur, mais je ne dois pas être très loin.

    Il faut modifier la méthode la méthode doSave() on est sur que l'enregistrement est valide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public function doSave($conn = null)
    {
       $this->setValue('champ3', "array('A' => '" .  $this->getValue('champ3-A') . "', 'B' => '" . $this->getValue('champ3-B') . "')");
       parent::doSave($conn);
    }
    Code non testé, mais à priori je le sens bien.

    Quoique j'aurais plutôt utilisé une méthode de sérialisation pour mettre les données dans le champ.

    Bonne chance,
    Michel

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Par défaut
    La solution me parait bonne mais le seul problème est que la méthode setValue() n'existe pas ... je travaille avec doctrine je sais pas si c'est une fonction propel ...
    "Call to undefined method ****Form::setValue."

  5. #5
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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
    Par défaut
    Je savais qu'il faudrait ruser..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->Value['champ3'] = "array('A' => '" .  $this->getValue('champ3-A') . "', 'B' => '" . $this->getValue('champ3-B') . "')");
    devrait marcher. Je pense. Un peu tard pour tester...

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Par défaut
    pas d'erreur mais pas d'effet non plus. $this->Value['champ1'] n'est pas défini non plus.

  7. #7
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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
    Par défaut
    Dans l'objet form, le tableau value[] comporte toutes les valeurs de l'objet actuel. Il doit être renseigné après que les données aient été validé (donc après le bind, si le is_valid() est à true ).

    C'est ce tableau qui est envoyé à l'objet sfDoctrineRecord pour l'enregistrement des modification.

    Dans mes souvenirs, c'est cet objet que j'ai utilisé dans une application pour générer un log des modifications sur certaines tables.

    Vérifie que tu as bien binder et validé les données avant de t'attaquer au tableau.

  8. #8
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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
    Par défaut
    La méthode configure() figurant dans l'objet form, si on veut l'adapter pour un module, il convient de faire un enfant à partir de base<Table>Form pour chaque module a modifier.

    Exemple, dans le module titi on veut accéder particulièrement au form qui dépend de la table achat. Le formulaire normal sera :
    lib/form/doctrine/AchatForm.class.php enfant de
    lib/form/doctrine/base/baseAchatForm.class.php

    Si tu veux un form particulier pour un module particuler, rien ne t'empêche de créer un :
    lib/form/doctrine/titiAchatForm.class.php basé soit sur AchatForm.class.php ou alors à la base sur baseAchatForm.class.php.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Par défaut
    ok je te remercie de ton aide. Ca devrait être tout encore merci

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/07/2011, 17h22
  2. Réponses: 9
    Dernier message: 22/06/2011, 16h19
  3. Réponses: 4
    Dernier message: 06/07/2010, 11h53
  4. Réponses: 10
    Dernier message: 10/06/2004, 16h20
  5. Gestion de formulaire avec xml et sans serveur ?
    Par meliane dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 05/05/2004, 19h57

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