Ouais, je l'ai lu ce tutorial, mais j'ai vraiment du mal avec les
formulaires. Quelqu'un peut-il m'expliquer un truc simple. J'ai le schéma
suivant :

CcGroup:
  columns:
    is_virtual:     { type: boolean, notnull: true, default: 0 }
    label:          { type: string(255), notnull: true }

CcMemberGroup:
  columns:
    person_id:      { type: integer, primary: true }
    group_id:       { type: integer, primary: true }
  relations:
    CcPerson:        { onDelete: CASCADE, local: person_id, foreign: id,
foreignAlias: CcMembersGroup }
    CcGroup:         { onDelete: CASCADE, local: group_id, foreign: id,
foreignAlias: CcMemberGroups}

CcPerson:
  columns:
    email:          { type: string(255), notnull: true, email: true, unique:
true }
    lastname:       { type: string(255), notnull: true }
    firstname:      { type: string(255), notnull: true }
    gender:         { type: integer(1), notnull: true }
    arrivaldate:    { type: timestamp, notnull: true }
    departuredate:  { type: timestamp }

À partir de là, je veux disposer d'un formulaire pour créer un utilisateur
et lui attribuer un ou plusieurs groupes directement (la possibilité de
créer un groupe via ce formulaire est complètement en option).

J'ai donc créé un formulaire CcPersonFullForm qui étend le formulaire
CcPersonForm.

CcPersonForm est bidon :

class CcPersonForm extends BaseCcPersonForm
{
  public function configure(){
    parent::setup();
    $gender = array(
        0 => "Homme",
        1 => "Femme"
      );
      $this->setWidget('gender',new sfWidgetFormSelect(array('choices' =>
$gender)));
  }
}

Maintenant CcPersonFullForm, c'est là que je pèche, j'ai l'impression que ce
n'est pas propre :

class CcPersonFullForm extends CcPersonForm{
  public function configure(){
    parent::configure();

    $this->setWidget('membergroup_list', new
sfWidgetFormDoctrineChoice(array('model' => 'CcGroup', 'multiple' =>
true)));
    $this->setValidator('membergroup_list', new
sfValidatorDoctrineChoice(array('model' => 'CcGroup', 'required' => true,
'multiple' => true)));

}

et ensuite que faut-il écrire dans les méthodes doSave et doUpdate ?


*Cyril FLIELLER*



Le 24 mars 2011 10:23, alex baron <[email protected]> a écrit :

> Il existe un tutorial sur les formulaires embarqués sur le site de symfony.
> Il existe plusieurs types de formaulaires embarqués !
> http://www.symfony-project.org/more-with-symfony/1_4/fr/06-Advanced-Forms
>
>
> Alexandre Baron
>
>
>
>
> Le 24 mars 2011 10:06, Cyril FLIELLER <[email protected]> a écrit :
>
>>  Qu'appelles-tu embarquer les formulaires ?
>>
>> *Cyril FLIELLER*
>>
>>
>>
>> Le 24 mars 2011 10:03, Lélio ML <[email protected]> a écrit :
>>
>>  Alors tu peux faire ces traitements dans doUpdate() qui permet de
>>> contrôler
>>> comment sont remplis les champs.
>>>
>>> Mais sinon, ne devrais-tu pas embarquer les formulaires si tu traites
>>> plusieurs Model (Table) dans ton formulaire ? Ce serait peut-être plus
>>> propre, tu gèrerais mieux les doUpdate().
>>>
>>> -----Message d'origine-----
>>> De : [email protected] [mailto:[email protected]] De
>>> la
>>> part de Cyril FLIELLER
>>> Envoyé : jeudi 24 mars 2011 09:53
>>> À : [email protected]
>>> Objet : Re: [symfony-fr] [Form] function save()
>>>
>>> Mais dans ce formulaire, je ne permets pas à l'utilisateur de tout
>>> remplir,
>>> il y a des champs que je rempli au traitement du formulaire moi même.
>>>
>>> Cyril FLIELLER
>>>
>>>
>>>
>>>
>>> Le 24 mars 2011 09:48, alex baron <[email protected]> a écrit :
>>>
>>>
>>>        Il vaut mieux utliser la méthode doSave. De plus si tes relations
>>> sont bien déclarées et tes objets identifiés dans la config du
>>> formulaires,
>>> symfony te fera la sauvegarde correctement.
>>>        Alexandre Baron
>>>
>>>
>>>
>>>
>>>
>>>        Le 24 mars 2011 09:32, Cyril FLIELLER <[email protected]>
>>> a
>>> écrit :
>>>
>>>
>>>                Je n'arrive pas à comprendre comme sauvegarder les données
>>> d'un formulaire dans la database avec doctrine. Mon formulaire ne
>>> contient
>>> pas que les informations d'une seule table, mais de plusieurs, je dois
>>> donc
>>> traiter mes données afin de créer les (4) enregistrements :
>>>
>>>                public function save($con = null){
>>>                    try{
>>>                      // ajout agent
>>>                      $curAgent = new CcPerson();
>>>                      $curAgent->setFirstname($this->values['firstname'])
>>>                              ->setLastname($this->values['lastname'])
>>>                              ->setGender($this->values['gender'])
>>>                              ->setEmail($this->values['email'])
>>>
>>>  ->setArrivaldate($this->values['arrivaldate'])
>>>
>>> ->setDeparturedate($this->values['departuredate'])
>>>                              ->save($con);
>>>
>>>                      $curAgentId = $curAgent->getId();
>>>
>>>                      // member group
>>>                      foreach($this->values['membergroup_list'] as
>>> $curGroupId){
>>>                        $curMG = new CcMemberGroup();
>>>                        $curMG->setPersonId($curAgentId);
>>>                        $curMG->setGroupId($curGroupId);
>>>                        $curMG->save($con);
>>>                        unset($curMG);
>>>                      }
>>>
>>>                      // solde congé
>>>                      $congesCredit = new CcCredit();
>>>
>>> $congesCredit->setYear($this->values['exerciceConges'])
>>>                        ->setValue($this->values['creditConges'])
>>>                        ->setPersonId($curAgentId)
>>>                        ->setAbsencetypeId(1)
>>>                        ->setCcomment("Arrivée au laboratoire")
>>>                        ->setCreatedAt(date('Y'))
>>>                        ->save($con);
>>>
>>>                      // solde fractionnement
>>>                      $fracCredit = new CcCredit();
>>>
>>> $fracCredit->setYear($this->values['exerciceFractionnement'])
>>>                        ->setValue($this->values['creditFractionnement'])
>>>                        ->setPersonId($curAgentId)
>>>                        ->setAbsencetypeId(2)
>>>                        ->setCcomment("Arrivée au laboratoire")
>>>                        ->setCreatedAt()
>>>                        ->save($con);
>>>
>>>                      $con->commit();
>>>                    }
>>>                    catch (Exception $e){
>>>                      $con->rollBack();
>>>                      throw $e;
>>>                    }
>>>
>>>                    return $curAgent;
>>>                  }
>>>
>>>                Mais j'ai des erreurs !
>>>
>>>
>>>                Cyril FLIELLER
>>>
>>>
>>>
>>>
>>>
>>>                --
>>>                Vous recevez ce message, car vous êtes abonné au groupe
>>> Google Groupes Symfony-fr.
>>>                Pour envoyer un message à ce groupe, adressez un e-mail à
>>> [email protected].
>>>                Pour vous désabonner de ce groupe, envoyez un e-mail à
>>> l'adresse [email protected]
>>> <mailto:symfony-fr%[email protected]> .
>>>                 Pour plus d'options, consultez la page de ce groupe :
>>> http://groups.google.com/group/symfony-fr?hl=fr
>>>
>>>
>>>
>>>
>>>
>>>        --
>>>        Vous recevez ce message, car vous êtes abonné au groupe Google
>>> Groupes Symfony-fr.
>>>        Pour envoyer un message à ce groupe, adressez un e-mail à
>>> [email protected].
>>>        Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse
>>> [email protected]
>>> <mailto:symfony-fr%[email protected]> .
>>>         Pour plus d'options, consultez la page de ce groupe :
>>> http://groups.google.com/group/symfony-fr?hl=fr
>>>
>>>
>>>
>>> --
>>> Vous recevez ce message, car vous êtes abonné au groupe Google Groupes
>>> Symfony-fr.
>>> Pour envoyer un message à ce groupe, adressez un e-mail à
>>> [email protected].
>>> Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse
>>> [email protected].
>>> Pour plus d'options, consultez la page de ce groupe :
>>> http://groups.google.com/group/symfony-fr?hl=fr
>>>
>>>
>>> --
>>> Vous recevez ce message, car vous êtes abonné au groupe Google
>>> Groupes Symfony-fr.
>>> Pour envoyer un message à ce groupe, adressez un e-mail à
>>> [email protected].
>>> Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse
>>> [email protected].
>>> Pour plus d'options, consultez la page de ce groupe :
>>> http://groups.google.com/group/symfony-fr?hl=fr
>>>
>>>
>>  --
>> Vous recevez ce message, car vous êtes abonné au groupe Google
>> Groupes Symfony-fr.
>> Pour envoyer un message à ce groupe, adressez un e-mail à
>> [email protected].
>> Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse
>> [email protected].
>> Pour plus d'options, consultez la page de ce groupe :
>> http://groups.google.com/group/symfony-fr?hl=fr
>>
>
>  --
> Vous recevez ce message, car vous êtes abonné au groupe Google
> Groupes Symfony-fr.
> Pour envoyer un message à ce groupe, adressez un e-mail à
> [email protected].
> Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse
> [email protected].
> Pour plus d'options, consultez la page de ce groupe :
> http://groups.google.com/group/symfony-fr?hl=fr
>

-- 
Vous recevez ce message, car vous êtes abonné au groupe Google 
Groupes Symfony-fr.
Pour envoyer un message à ce groupe, adressez un e-mail 
à [email protected].
Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse 
[email protected].
Pour plus d'options, consultez la page de ce groupe : 
http://groups.google.com/group/symfony-fr?hl=fr

Répondre à