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

  1. #1
    Futur Membre du Club
    Inscrit en
    août 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : août 2010
    Messages : 8
    Points : 8
    Points
    8
    Par défaut remplir les valeurs d'une liste dans un form selon une des valeurs passées
    Bonjour

    Le titre est ronchon mais voici le problème.

    En gros il s'agit de s'inscrire à un evenement. Dans ce formulaire d'inscription je passe l'utilisateur et l'evenement mais je voudrais que la liste des dates ne contienne que les dates comprise entre la date de debut de l'evenement et la date de fin.

    Dans mon action j'ai ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $eventuser = new EventUser();
     
      	$eventuser->setEventId($request->getParameter('id'));
      	$eventuser->setUserId($this->getUser()->getGuardUser()->getId());
      	$event = EventTable::getinstance()->find($request->getParameter('id'));
     
     
      	$this->event = Doctrine_Core::getTable('Event')->getEvent($request->getParameter('id'));
     
        $this->form = new CustomEventUserForm($eventuser);
    la liste des dates provient de l'objet event:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->event->getDatesArray()
    j'ai essayé quelques trucs comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $schema = $this->form->getWidgetschema();
        $schema['date'] = new sfwidgetformchoice(array('choices' =>$this->event->getDatesArray() ));
    qui me remplit bien les dates mais qui semble faire une erreur dans la fonction create
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->processform ($request, $this->form);
    Ensuite j'ai essayer ainsi :

    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
     
    Action:
    $eventuser = new EventUser();
     
     
      	$event = EventTable::getinstance()->find($request->getParameter('id'));
     
      	$eventuser->setEvent($event);
      	$eventuser->setUserId($this->getUser()->getGuardUser()->getId());
     
     
     
      	$this->event = Doctrine_Core::getTable('Event')->getEvent($request->getParameter('id'));
     
        $this->form = new CustomEventUserForm($eventuser);
    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
    38
    39
    40
    41
    class EventUserForm extends BaseEventUserForm
    {
      public function configure()
      {
     
     
        $this->setWidgets(array(
          'id'            => new sfWidgetFormInputHidden(),
          'event_id'      => new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('Event'), 'add_empty' => false)),
          'user_id'       => new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('sfGuardUser'), 'add_empty' => true)),
          'reserving_for' => new sfWidgetFormInputText(),
     
          'ispaid'        => new sfWidgetFormInputCheckbox(),
          'isconfirmed'   => new sfWidgetFormInputCheckbox(),
     
        ));
    	$event = $this->object->Event;
     
        $schema = $this->getWidgetschema();
        $schema['date'] = new sfwidgetformchoice(array('choices' => $event->getDatesArray() ));
     
     
        $this->setValidators(array(
          'id'            => new sfValidatorChoice(array('choices' => array($this->getObject()->get('id')), 
          	'empty_value' => $this->getObject()->get('id'), 'required' => false)),
          'event_id'      => new sfValidatorDoctrineChoice(array('model' => $this->getRelatedModelName('Event'))),
          'user_id'       => new sfValidatorDoctrineChoice(array('model' => $this->getRelatedModelName('sfGuardUser'), 'required' => false)),
          'reserving_for' => new sfValidatorInteger(array('required' => false)),
          'date'          => new sfValidatorChoice(array('choices' => array($event->getDatesArray()),'required' => false)),
          'ispaid'        => new sfValidatorBoolean(array('required' => false)),
          'isconfirmed'   => new sfValidatorBoolean(array('required' => false)),
     
        ));
     
        $this->widgetSchema->setNameFormat('event_user[%s]');
     
        $this->errorSchema = new sfValidatorErrorSchema($this->validatorSchema);
     
        $this->setupInheritance();
      }
    }
    qui lui ne me remplit rien...

    (et vous l'aurez bien compris je suis un peu débutant)
    a+

  2. #2
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Alors je ne suis pas sur d'avoir tout compris, on va reprendre progressivement.

    Dans un premier temps j'ai compris que tu voulais remplir un form avec des valeurs ... mais je ne vois nulle part la fonction bind() que l'on retrouve assez fréquemment lorsqu'on parle de formulaires.

    D'ou ma première question, ne serait-ce pas tout simplement cette méthode qu'il te faut découvrir afin de réaliser ce que tu veux à savoir peupler ton formulaire pour ensuite l'enregistrer ? Jette un œil sur la doc symfony pour voir si ça colle.

    Ensuite j'ai cru comprendre qu'il fallait comparer des dates. Et pour ça il va falloir faire appel à un post-validator.

    Tu pourras trouver les deux points en exemple sur cette page.

    http://www.symfony-project.org/forms...orm-Validation

  3. #3
    Futur Membre du Club
    Inscrit en
    août 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : août 2010
    Messages : 8
    Points : 8
    Points
    8
    Par défaut la reponse
    ...
    je suis mauvais...

    Je faisais mes tests sur le eventuserform et j'appelle le CustomEventform... oui, c'etait tellement gros que je ne suis pas le seul à l'avoir vu

    En gros ce que je voulais est, lors de ma declaration, récupèrer les dates disponibles pour l'evenement où j'inscris la personne et que cela soit publié directement dans le formulaire (pas d'ajax, l'evenement ne peut pas être changé dans le formulaire)

    Ce que j'obtiens par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    // je recupère l'evenement que j'ai passé
    $event = $this->object->Event;
     
    // je crée le widget et le remplis des dates
        $schema = $this->getWidgetschema();
        $schema['date'] = new sfwidgetformchoice(array('choices' => $event->getDatesArray() ));
    Désolé pour l'arrachage de cheveux pour rien, etant quasi chauve vous aurez déjà bien compris pourquoi...

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/11/2014, 17h44
  2. Affichage d'une liste dans JSP à partir d'une requête HQL
    Par samirmember dans le forum Hibernate
    Réponses: 23
    Dernier message: 28/12/2011, 23h34
  3. Réponses: 8
    Dernier message: 05/11/2008, 18h29
  4. Réponses: 3
    Dernier message: 10/04/2008, 14h50
  5. [phpMyAdmin] Les bases ne sont plus listées sous la forme d'une liste
    Par loopback dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 05/01/2008, 16h57

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