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 :

deux validations de formulaire dans un même module


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 deux validations de formulaire dans un même module
    Je me pose des questions niveau architecture:

    Considérons un module "événement" et considérons la possibilité à un membre de s'y inscrire.

    Le formulaire correspondant à l'inscription du membre à l'événement se trouve donc dans le template showSuccess.php du module événement.
    Par contre, je me demande comment gérer l'action create qui permet d'ajouter un membre à un événement?
    En fait, j'ai déjà une action create dans mon fichier actions.php de mon module événement qui elle s'occupe de créer un nouvel événement.

    Je ne pense pas que créer un nouveau module pour gérer cette inscription est la meilleure manière de faire.

    Que mettriez-vous comme paramètre à form_tag_for?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo form_tag_for($form, '???') ?>
    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    T'as qu'a rajouter une action executeAddParticipant(), tu fais une route qui va bien genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    event-add-participant:
      url: /evenement/add-participant
      params: { module: event, action: addParticipant }
    Et tu fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?php echo form_tag_for($form, '@event-add-participant') ?>
    Je ne vois pas en quoi ça ne fonctionnerait pas en tout cas.

  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
    Il me dit que The route "event-add-participant_create" does not exist.

    Sinon pour l'url dans le routing, c'est plutôt event/1 car mon formulaire fait parti du template showSuccess.php de mon event ?

    Merci

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ah oui en effet, j'utilise jamais le form_tag_for().

    Alors en fait, si tu lui mets '@event-add-participant', il va chercher '@event-add-participant_create' quand c'est une création et '@event-add-participant_update' dans le cas d'une mise à jour (toi ça ne devrait jamais se produire mais bon ...)

    Est-ce que tu ne peux pas plutôt remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo form_tag_for($form, '@event-add-participant');
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo $form->renderFormTag(url_for('@event-add-participant', array('method' => 'post')));
    Sinon pour l'url dans le routing, c'est plutôt event/1 car mon formulaire fait parti du template showSuccess.php de mon event ?
    Je ne comprends absolument pas ce que tu veux dire là

  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
    Pour éviter l'erreur, j'ai déjà utilisé le helper form_tag au lieu de form_tag_for:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php echo form_tag('@event-add-participant',
    					array('method' => 'post',
    						  'multipart' => true
    						  )); ?>
    Cela doit être la même chose que le :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $form->renderFormTag(url_for('@event-add-participant', array('method' => 'post')));

    (J'ai vu ton message après )

    Donc, maintenant, je dois m'occuper de l'action executeAddParticipant.


    J'ai un objet EventParticipant qui a pour attribut event_id, member_id
    et is_notified (case checkbox à cocher).

    Je suppose que je dois appeler la methode processForm.

    Pour le tuto jobeet, elle ressemblait à ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     protected function processForm(sfWebRequest $request, sfForm $form)
      {
        $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
        if ($form->isValid())
        {
          $job = $form->save();
     
          $this->redirect('job/edit?id='.$job->getId());
        }
      }
    Mais pour mon cas?

    Merci

  6. #6
    Invité
    Invité(e)
    Par défaut
    Et le code de ton formulaire, on peut le voir ?

  7. #7
    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
    Voici 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
     
    class EventParticipantForm extends BaseEventParticipantForm
    {
      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('Participant')->getAll(),
    																		'multiple' => false,
    																		'expanded' => false
    																		));
     
    	  $this->widgetSchema['is_notified'] = new sfWidgetFormChoice(array(
    																 'choices'  => Doctrine_Core::getTable('EventParticipant')->getTypes(),
    																 'multiple' => false,
    																 'expanded' => true
    																 ));
    	  $this->widgetSchema->setLabels(array(
    										   'is_notified'    => 'Je souhaite recevoir les conclusions de cet événement',
    										   'motivation'    => 'Motivation (300 car)',
    										   'accept'    => 'Je souhaite m\'inscrire à cet événement',
    										   ));
     
      }
    }

    Voici le parent de 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
    31
    32
    33
    34
    35
    36
    37
     
    abstract class BaseEventParticipantForm extends BaseFormDoctrine
    {
      public function setup()
      {
        $this->setWidgets(array(
          'event_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(
          '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)),
        ));
     
        $this->widgetSchema->setNameFormat('event_participants[%s]');
     
        $this->errorSchema = new sfValidatorErrorSchema($this->validatorSchema);
     
        $this->setupInheritance();
     
        parent::setup();
      }
     
      public function getModelName()
      {
        return 'EventParticipant';
      }
     
    }
    Le membre est choisi dans une liste déroulante pour le moment dans le form mais ensuite il sera mis dans la session de l'utilisateur.

    Merci.

Discussions similaires

  1. deux formulaires dans la même jsp
    Par safa baccouche dans le forum Struts 1
    Réponses: 4
    Dernier message: 07/06/2011, 17h18
  2. [1.x] symfony : inclure deux formulaires dans la même page
    Par kari.mourad dans le forum Débuter
    Réponses: 1
    Dernier message: 27/03/2011, 04h33
  3. Envoie de deux formulaires dans le même email.
    Par michab18 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 20/10/2009, 22h41
  4. Deux formulaires dans la même page IE7
    Par antow42 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 16/03/2009, 11h29
  5. Soumettre deux formulaires dans la même fonction.
    Par Bisûnûrs dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 15/11/2006, 23h18

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