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 :

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)),
    ));
Dans mon form, j'ai aussi ajouté une checkbox (accept) mais qui n'est pas un champ à reprendre en base.

Mon form:

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 ',
										   ));
 
  }
}
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
 
protected function processSubscribeForm(sfWebRequest $request, sfForm $form)
	{
		$form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
 
		if ($form->isValid())
		{
			$form->save();
 
		}
 
 
	}