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 avec valeur par défaut dynamique


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2006
    Messages : 120
    Par défaut Formulaire avec valeur par défaut dynamique
    Bonjour,

    Voilà, je dois faire un formulaire assez basique avec une liste déroulantes contenant les régions de France, un numéro de semaine (dans un champs text) et deux boutons : précédent et suivante pour naviguer sur les semaines.

    La soumission du formulaire se fera en Ajax à terme.

    J'ai donc créer une classe pour ce formulaire (pour l'instant il n'y a que la liste déroulant avec les régions) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public function buildForm(FormBuilderInterface $builder, array $options)
        {        
            $builder->add('region', 'entity', array(
                            'class' => 'MonProjetBundle:Region',
                            'property' => 'name',
                            'query_builder' => function(\Doctrine\ORM\EntityRepository $er) {
                                return $er->createQueryBuilder('r')->orderBy('r.name', 'ASC');
                            },
                            'attr' => array('onchange' => 'javascript:this.form.submit();',
                                            'value' => $options['region'])
                        ));
        }
    Le problème est que la région aura une valeur par défaut selon la personne connectée.
    Je créer le formulaire à partir de mon controller, mais de ce fait, comment envoyer la région par défaut ?

    J'ai testé ceci dans mon controller :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     $form2 = $this->createForm(new RegionType(), array('region' => 3));
    Le "3" étant l'id région par défaut que je souhaite. En le récupérant dans les options de mon buildForm, mais à priori ça ne fonctionne pas comme ca.

    Dois-je construire le formulaire directement dans le controller ?

    J'ai pas mal cherché et je ne trouve aucune réponse...

    Merci d'avance.

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    Bonjour,

    Plutôt que l'id passe plutôt ton entité Région.
    D'ailleurs si ton formulaire est mappé à une entité passe plutôt cet entité avec son attribut région prérempli plutôt qu'un tableau

  3. #3
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2006
    Messages : 120
    Par défaut
    Le formulaire n'est pas mappé à une entité car il va y avoir un autre champs (celui pour naviguer entre les différentes semaines) qui n'a rien à voir avec mon entité.
    C'est juste une sélection de région, il n'y aura pas de persistance des données derrière.
    A moins qu'on puisse quand même le mapper malgré tout.
    Dans tous les cas, j'aurais également le même problème quand je rajouterai mon champs text pour le numéro de la semaine, il sera par défaut sur la semaine suivant la semaine en cours.

    Si je suis pas assez clair dis moi.

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    Est ce que ma première suggestion fonctionne?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $region=$this->getDoctrine()->getEntityManager()->getRepository('MonProjetBundle:Region')->find($idRegion);
    $form2 = $this->createForm(new RegionType(), array('region' => $region));
    note:
    Le formulaire n'est pas mappé à une entité car il va y avoir un autre champs (celui pour naviguer entre les différentes semaines) qui n'a rien à voir avec mon entité.
    OK, cela dit cela n'empèche pas de mapper ton formulaire à un objet (qui ne soit pas une Entité persistante) ayant un champ region et un champ numSemaine (ainsi qu'un champ user probablement). A toi de voir si cela pourrait être utile de mettre une partie de la logique de ton appli dans cette classe (ex méthode previousWeek(), nextWeek() ...)

  5. #5
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2006
    Messages : 120
    Par défaut
    J'ai testé et ça ne fonctionne pas (sans mapper mon form avec mon entité).
    J'ai testé en mappant ma class à mon Entité :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public function setDefaultOptions(OptionsResolverInterface $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'Mon\ProjetBundle\Entity\Region'
            ));
        }
    Mais j'ai une erreur qui survient :

    The form's view data is expected to be an instance of class Mon\ProjetBundle\Entity\Region, but is a(n) array. You can avoid this error by setting the "data_class" option to null or by adding a view transformer that transforms a(n) array to an instance of Mon\ProjetBundle\Entity\Region.

    Je ne vois vraiment pas comment faire...

    [EDIT]

    J'ai retiré le mapping sur Region, et dans mon entité, j'ai rajouté ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public function getRegion() {
    return $this;
    }
    Pour ne plus avoir d'erreur, j'ai du retirer mon champs text de mon formulaire.
    Là, plus aucune erreur mais ça ne fonctionne toujours pas, ma liste reste sur le premier élément et je n'ai aucun 'selected="selected"'...

    Et autre précision, mon champs texte ne fait pas référence à un attribut de mon entité Region, les deux sont indépendants.

Discussions similaires

  1. Formulaire, Champ Grisé avec valeur "par défaut"
    Par Lutine dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 12/06/2011, 18h38
  2. [AC-2010] Ouvrir un sous formulaire via formulaire avec valeur par défaut
    Par Sami Xite dans le forum Access
    Réponses: 2
    Dernier message: 30/07/2010, 18h13
  3. Réponses: 4
    Dernier message: 01/11/2008, 09h41
  4. [MySQL] formulaire et valeur par défaut
    Par dgac2000 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/05/2007, 16h05
  5. Supprimer une colonne avec valeurs par défaut
    Par SlashOwnsU dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 18/09/2006, 10h10

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