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 un peu spécial [1.x]


Sujet :

Symfony PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 188
    Par défaut 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 : 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();
     
    		}
     
     
    	}

  2. #2
    Invité
    Invité(e)
    Par défaut
    Tu peux faire dans le configure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $this->setDefault('is_accepted', 0);
    $this->setDefault('is_guested', 0);
    Sinon je comprends pas ce que tu veux dire par "la conversion de l'objet ZuluMember en son id."

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 188
    Par défaut
    Dans le configure, j'ai écrit cette instruction qui configure une liste déroulante de ZuluMember mais le problème est que l'attribut member_id requiert un id et non un ZuluMember ou son nom.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     $this->widgetSchema['member_id'] = new sfWidgetFormChoice(array(
    																		'choices'  => Doctrine_Core::getTable('ZuluMember')->getAll(),
    																		'multiple' => false,
    																		'expanded' => false
    																		));
    Comment afficher un attribut name à l'écran et récupérer l'id pour le form?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Oh d'accord, je crois comprendre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $this->widgetSchema['member_id'] = new sfWidgetFormChoice(array(
      'choices'  => Doctrine_Core::getTable('ZuluMember')->getAll()->toKeyValueArray('id', 'name'),
      'multiple' => false,
      'expanded' => false
    ));
    Quelque chose comme ça devrait fonctionner non ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 188
    Par défaut
    Oui, ça marche bien merci.

    Maintenant, il me reste le tree_id à configurer.
    En fait, le formulaire est affiché sur la page qui a pour url : tree/show/id .

    Donc, il faudrait que je puisse récupérer la valeur de l'id et que je la passe dans mon formulaire dans un champ caché par exemple.

    J'aurai bien fait comme indiqué sur la page:
    http://www.symfony-project.org/forms...ues_for_fields

    Listing 1-14 - Default Values of the Widgets via the Constructor of sfForm

    Mais, le form n'hérite pas de sfForm mais de
    BaseZuluTreeGuestForm qui lui hérite de BaseFormDoctrine
    donc j'ai cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The "ZuluTreeGuestForm" form only accepts a "ZuluTreeGuest" object.


    Donc, comment et où récupérer l'id?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 188
    Par défaut
    Ok, j'ai réussi,
    j'ai passé en argument du form un objet zulutreeguest comme demandé.

    Dans l'actions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    	  $zulu_tree_guest = new ZuluTreeGuest();
     
    	  $zulu_tree_guest->setTreeId($request->getParameter('id'));
     
    	  $this->form = new ZuluTreeGuestForm($zulu_tree_guest);
    Puis, dans le form, la valeur de l'id pour le tree est assigné par défaut.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Formulaire un peu spécial
    Par Neilime05 dans le forum Zend_Form
    Réponses: 24
    Dernier message: 11/05/2009, 12h01
  2. Création d'un formulaire un peu spécial !
    Par magohamoth dans le forum Langage
    Réponses: 3
    Dernier message: 22/11/2006, 17h05
  3. récupérer les données d'un formulaire un peu spécial
    Par Jim_Nastiq dans le forum Interfaces Graphiques
    Réponses: 12
    Dernier message: 10/07/2006, 10h53
  4. Réponses: 4
    Dernier message: 05/07/2004, 13h17
  5. ORDER BY un peu spécial
    Par gromez dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 29/04/2004, 11h17

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