Formulaire un peu spécial
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:
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:
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:
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();
}
} |