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 :

[Form] Imbrication de formulaires


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé

    Avatar de snake264
    Homme Profil pro
    Datascientist chez Leboncoin
    Inscrit en
    Novembre 2006
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Datascientist chez Leboncoin
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 914
    Par défaut [Form] Imbrication de formulaires


    J'utilise Symfony 2.2 et j'ai un problème quand je veux imbriquer mes formulaires, en fait seul la dernière entrée du champ est prise en compte, peut importe le nombre de champs que je créé.

    Je vous met 3 images pour représenter mon problème :

    • La première représente le formulaire avec plusieurs 2 champs "mails" ;
    • La seconde représente le dump de ma variable représentant le formulaire (vous pouvez voir que seul la deuxième adresse est dans le dump et pas la première) ;
    • La troisième représente le résultat après validation du formulaire.


    Voici aussi le code réduit au minimum que j'utilise :

    TestEntity.php :
    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
    <?php
     
    namespace dvp\Web2FoafBundle\Entity;
     
    use Symfony\Component\Validator\Constraints as Assert;
     
    class Person {
        /**
         * @var string $givenName
         * @Assert\NotBlank()
         */
        private $givenName;
     
        /**
         * @var string $name
         * @Assert\NotBlank()
         */
        private $name;
     
        /**
         * @var string $email
         * @Assert\All(@Assert\Email(checkMX = true, message="Votre adresse mail est soit mal formée, ou n'existe pas"))
         */
        private $emails;
     
        public function __construct() {
            $this->emails = array();
        }
     
        public function getEmails() {
            return $this->emails;
        }
     
        public function setEmails ($emails) {
            $this->emails = $emails;
        }
    }
    TestForm.php :
    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
    <?php
     
    namespace dvp\Web2FoafBundle\Form;
     
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\OptionsResolver\OptionsResolverInterface;
     
    class PersonType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('givenName', 'text')
                ->add('name', 'text')
                ->add('emails', 'collection', array('type' => 'email', 'allow_add' => true, 'allow_delete' => true, 'by_reference' => false, 'required' => false))
           ;
        }
     
        public function setDefaultOptions(OptionsResolverInterface $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'dvp\Web2FoafBundle\Entity\Person',
                        'cascade_validation' => true,
            ));
        }
     
        public function getName()
        {
            return 'person';
        }
     
    }
    ?>
    TestController.php :
    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
    <?php
    namespace dvp\Web2FoafBundle\Controller;
     
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use Symfony\Component\HttpFoundation\Request;
    use dvp\Web2FoafBundle\Entity\Person;
    use dvp\Web2FoafBundle\Form\PersonType;
     
    class PersonController extends Controller
    {
        public function createAction (Request $request) {
            $person = new Person ();
            $person->setEncrypt (true);
            $form = $this->createForm (new PersonType (), $person);
     
            if ($request->isMethod('POST')) {
                $form->bind($request);
                if ($form->isValid ()) {
                    var_dump($person);
                }
            }
     
            return $this->render('dvpWeb2FoafBundle:Person:create.html.twig', array('form' => $form->createView(), 'message' => ''));
        }
    }
    ?>
    Test.js :
    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
    $(document).ready(function() {
        function add (container, tab, div, text) {
             if (container.children ().length == 0) {
                 var link = $('<a href="#">Supprimer ' + text + '</a>')
                 container.append ($(container.attr ('data-prototype').replace(/\$\$name\$\$/g, container.children ().length + 1 + tab[0])))
                 div.append (link)
                 link.on('click', function() {
                      container.children().last().remove();
                      if (container.children ().length == 0) {
                           div.children().last().remove()
                      }
                 });
             }
             else {
                 container.append ($(container.attr ('data-prototype').replace(/\$\$name\$\$/g, container.children ().length + 1 + tab[1])))
            }
        }
        $('#add_email').click (function () {
              var tab = new Array ('èr'.sup() + ' email : ', 'e'.sup() + ' email : ')
              add ($('#person_emails'), tab, $('#email'), 'un email')
        });
    }) ;
    index.html.twig :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <!DOCTYPE HTML>
    <html>
        <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    	<title>{% block title %}Projet{% endblock %}</title>
        </head>
        <body>
    	{% block body %}
    	{% endblock %}
        </body>
    </html>
    test.html.twig :
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    % extends "dvpWeb2FoafBundle:Person:index.html.twig" %}
     
    {% block title %}{{ parent() }} - Création de profils FOAF{% endblock %}
     
    {% block body %}
     
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
    <script src="{{ asset('bundles/formfoaf/js/addDelFieldForm.js') }}"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script>
    <script src="{{ asset('bundles/formfoaf/js/jquery.ui.datepicker-fr.js') }}"></script>
    <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/ui-lightness/jquery-ui.css" type="text/css" media="all"/>
     
    <h1>Créer un profil FOAF</h1>
     
    {% if message %}
    <p>{{ message }}</p>
    {% endif %}
     
    <form action="" method="post" {{ form_enctype(form) }}>
    	{{ form_errors(form) }}
        <div id="givenName">
    	    <strong>{{ form_label(form.givenName, "Prénom : ") }}</strong>
    	    {{ form_errors(form.givenName) }}
    	    {{ form_widget(form.givenName) }}
    	</div>
    	<div id="name">
    	    <strong>{{ form_label(form.name, "Nom : ") }}</strong>
    	    {{ form_errors(form.name) }}
    	    {{ form_widget(form.name) }}
    	</div>
    	<div id="title">
    	    <strong>{{ form_label(form.title, "Votre titre : ") }}</strong>
    	    {{ form_errors(form.title) }}
    	    {{ form_widget(form.title) }}
    	</div>
    	<script>
    	    function displayVals () {
    		var value = $('#person_title').val ();
     
    		if (value == 'autre') {
    		    $('select').remove ('#person_title')
    		    $('#title').append ('<input id=\"person_title\" type=\"text\"/>')
    		}
    	    }
    	    $('select').change (displayVals);
    	    displayVals ();
    	</script>
    	<div id="email">
    	    <strong>{{ form_label(form.emails, "Votre (vos) email(s) : ") }}</strong>
    	    {{ form_errors(form.emails) }}
    	    {{ form_widget(form.emails) }}
    	    <a href="#" id="add_email">Ajouter un email</a>
    	</div>
    {{ form_rest(form) }}
        <input type="submit" />
    </form>
     
    {% endblock %}
    Quelqu'un saurait-il ce que j'ai fait de travers ?

    d'avance
    Images attachées Images attachées    

Discussions similaires

  1. [2.x] [Form] Imbrication de plusieurs formulaires et mélange du prototype
    Par FadeToBlack dans le forum Symfony
    Réponses: 13
    Dernier message: 16/04/2013, 14h37
  2. [2.x] [Form] Imbrication de formulaires
    Par EtudiantJ2EE dans le forum Symfony
    Réponses: 28
    Dernier message: 16/04/2013, 14h08
  3. [2.x] [Form] Imbrication de formulaires
    Par dukoid dans le forum Symfony
    Réponses: 7
    Dernier message: 26/03/2013, 08h14
  4. Dessiner des formes dans un formulaire
    Par karimspace dans le forum Access
    Réponses: 3
    Dernier message: 30/12/2005, 14h24
  5. [PEAR][HTML_QuickForm] Mise en forme d'un formulaire
    Par Norabfr dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 30/12/2005, 13h41

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