Bonjour,
voici mon schéma de bdd.
ZuluTreeGuest:
columns:
tree_id: { type: integer, primary: true }
member_id: { type: integer, primary: true }
is_notified: { type: integer}
is_accepted: { type: integer}
is_guested: { type: integer}
motivation: { type: string(300) }
relations:
ZuluMember: { local: member_id, foreign: id }
ZuluTree: { local: tree_id, foreign: id }
Je veux afficher dans mon formulaire:
- une liste déroulante de ZuluMember (affichage de l'attribut name de l'objet ZuluMember)
- une checkbox correspondant à l'attribut is_notified (si coché,mettre à 1, sinon 0)
- une textarea correspondant à l'attribut motivation.
Pour les autres champs:
Le tree_id est une valeur cachée dépendant de la page affichée (show/id)
Les autres champs is_accepted et is_guested sont mis à 0.
J'ai tenté de créer un formulaire mais en fait, je me demande comment je peux gérer le bindage de mon formulaire?
Est-ce possible de gérer à la main sans faire un bind :
la mise à 0 des champs is_accepted et is_guested
la conversion de l'objet ZuluMember en son id.
Comment faire?
Merci.
Mon BaseForm :
Dans mon form, j'ai aussi ajouté une checkbox (accept) mais qui n'est pas un champ à reprendre en base.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 abstract class BaseZuluTreeGuestForm extends BaseFormDoctrine { public function setup() { $this->setWidgets(array( 'tree_id' => new sfWidgetFormInputHidden(), 'member_id' => new sfWidgetFormInputText(), 'is_notified' => new sfWidgetFormInputText(), 'is_accepted' => new sfWidgetFormInputText(), 'is_guested' => new sfWidgetFormInputText(), 'motivation' => new sfWidgetFormTextarea(), )); $this->setValidators(array( 'tree_id' => new sfValidatorDoctrineChoice(array('model' => $this->getModelName(), 'column' => 'tree_id', 'required' => false)), 'member_id' => new sfValidatorDoctrineChoice(array('model' => $this->getModelName(), 'column' => 'member_id', 'required' => false)), 'is_notified' => new sfValidatorInteger(array('required' => false)), 'is_accepted' => new sfValidatorInteger(array('required' => false)), 'is_guested' => new sfValidatorInteger(array('required' => false)), 'motivation' => new sfValidatorString(array('max_length' => 300, 'required' => false)), ));
Mon form:
Mon processForm dans mon fichier d'actions:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 class ZuluTreeGuestForm extends BaseZuluTreeGuestForm { public function configure() { unset( $this['is_guested'], $this['is_accepted'] ); $this->widgetSchema['accept'] = new sfWidgetFormInputCheckbox(); $this->widgetSchema['member_id'] = new sfWidgetFormChoice(array( 'choices' => Doctrine_Core::getTable('ZuluMember')->getAll(), 'multiple' => false, 'expanded' => false )); $this->widgetSchema['is_notified'] = new sfWidgetFormChoice(array( 'choices' => Doctrine_Core::getTable('ZuluTreeGuest')->getTypes(), 'multiple' => false, 'expanded' => true )); $this->widgetSchema->setLabels(array( 'is_notified' => 'Je souhaite recevoir les conclusions de cet arbre', 'motivation' => 'Motivation (300 car)', 'accept' => 'Je souhaite m\'inscrire à cet arbre ', )); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 protected function processSubscribeForm(sfWebRequest $request, sfForm $form) { $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName())); if ($form->isValid()) { $form->save(); } }
Partager