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 :

[Symfony]Formulaire cahier de note


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2002
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 94
    Par défaut [Symfony]Formulaire cahier de note
    Salut à tous,

    Depuis un certain temps je travaille sur une application web permettant de gérer une classe. Mon but est de faciliter la tâche des enseignants. Je cherche à faire un page web permettant aux profs de gérer un cahier de notes simples.
    Donc j'ai un entity enfants avec nom prénom, et un entity note avec un champ résultat.(très basique mais je veux juste comprendre comment faire avec de me lancer).
    J'utilise symfony 2.4
    Doc voici mon controller.
    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
    /**
         * Displays a form to create a new Rencontres entity.
         *
         * @Route("/new", name="rencontres_new")
         * @Method("GET")
         * @Template()
         */
        public function newAction()
        {
     
     
            $em = $this->getDoctrine()->getManager();
            $liste = $em->getRepository('TicGestionBundle:Enfants')->findAll();
     
            $enfants = array();
     
     
            foreach($liste as $enfant)
            {
                $entity = new Rencontres();
                $f  = $this->createCreateForm($entity);
     
                $enfants[]= $entity;
                $form[$enfant->getId()]= $f->createView();
     
            }
     
            return array(
                'liste' => $liste,
                'enfant'=>$enfants,
     
                'form'   => $form,
            );
        }
    Dans ma vue

    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
    {% extends '::base.html.twig' %}
     
    {% block body -%}
        <h1>Note creation</h1><hr>
     
    {%for enfants in liste %}
     
        <table>
     
            <tr>
                <td>{{enfants.nom}} {{enfants.prenom}} {{enfants.id}}</td>
              <td>
              {% endfor %}  
                {%for form in form %} 
                {{ form_start(form) }}
     
                {{ form_errors(form) }}
     
                {{ form_end(form) }}
                {% endfor %}           
            </td>
     
            </tr>
     
        </table>
     
     
     
     
     
     
     
     
            <ul class="record_actions">
        <li>
            <a href="{{ path('rencontres') }}">
                Retour à la liste
            </a>
        </li>
    </ul>
    {% endblock %}
    ce code affiche bien le formulaire mais il y a plusieurs boutons et autant de formulaire que de nom d'élève dans la base de donnée. De plus, chaque formiulaire n'a pas de nom ou id unique ce qui pose problème lors de l'enregistrement.

  2. #2
    Membre Expert 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 : 37
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Par défaut
    Hello,

    il y a plusieurs boutons et autant de formulaire que de nom d'élève dans la base de donnée
    Tu récupères tous les élèves dans ton contrôleur, et tu leur affectes un formulaire. Et ensuite tu boucles sur les élèves en demandant d'afficher le formulaire. Donc ce comportement est normal.
    Si tu souhaites n'avoir qu'un seul formulaire global, il ne faut créer qu'un seul formulaire qui lui, embarquera les autres formulaire des notes ou des élèves (ou des deux).

    J'avoue ne pas vraiment visualiser ce que tu veux mais à priori ce que je comprends c'est que tu veux pouvoir visualiser l'ensemble des élèves, et pour chaque élève tu veux pouvoir ajouter une note.

    Comme il s'agit là d'un formulaire de création, c'est normal que l'objet se trouvant dans ton formulaire n'aie pas d'id puisqu'il est encore vierge au moment ou tu l'affiches (la note n'existe pas encore).

    Voilà ce que je te suggèrerais :

    Tu fais une action avec le récapitulatif des notes de tous les élèves sans inclure le moindre formulaire, et une action pour ajouter des notes à un seul élève : dans laquelle se trouvera un formulaire embarquant une collection de NoteForm.. (ce qui à mon sens est plus simple à implémenter et à comprendre)

    ...ou alors...

    ...tu restes sur une seule action dans laquelle tu dois pouvoir ajouter des notes pour n'importe quel élève : auquel cas, tu dois rajouter une couche de formulaires à embarquer. Un GlobalForm embarquant des EleveForms qui eux même embarquent des NoteForm. Selon tes besoins, tu pourras spécifier la possibilité d'ajouter des élèves ou non, ainsi que des notes pour chacun de ces élèves. Mais à la fin tu n'auras qu'un seul formulaire : le GlobalForm.

    Dans les deux cas, je te suggère de jeter un oeil à la manière dont on embarque des collections de form => http://symfony.com/fr/doc/current/re...ollection.html

    Coté twig, tu devras parcourir (selon ton choix) soit la collection d'élèves, puis la collection de notes qui s'y trouve (si tu veux afficher aussi les notes existantes), ou bien uniquement la collection de notes d'un élève.

    Au moment du POST, tu n'auras qu'un formulaire à "process", et si tes cascades sont bien faites, les nouvelles notes seront alors persistées puis enregistrées pour chaque élève en BDD et auront à ce moment un ID.

    J'espère avoir été assez clair, bon courage !

  3. #3
    Membre confirmé
    Inscrit en
    Août 2002
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 94
    Par défaut Merci de ton temps et aide
    Je te remercie du temps que tu as pris pour répondre à mon problème.
    Mais je ne suis pas un programmeur professionnel donc j'ai un peu de difficulté à comprendre les collections.
    Voici ce que j'en comprend.

    J'ai toujours mon entity Enfants (existant)
    j'ai un entity Notes (existant)
    et un troisième entity CahierNotes englobant enfants et notes(nouvelle entity)

    Pour ce qui est des collections je ne suis jamais arriver à afficher la moindre donnée.

    merci de m'éclairer

  4. #4
    Membre Expert 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 : 37
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Par défaut
    Dans un premier temps ce sont les relations entre tes objets qui vont te permettre de faire des collections. Ton schema doit être bien construit et les relations doivent correspondre à ton besoin.

    Pour être bien sûr : ton cahier de note c'est une entité par enfant ou c'est une entité pour tous les enfants ?

    Si c'est une entité pour tous les enfants, l'entité n'a pas vraiment de raison d'être puisqu'il n'y en aura qu'une seule, donc pas besoin de faire une entité pour ça. (à moins qu'il y ait une notion de classes d'enfant, auquel cas un cahier par classe pourrait avoir du sens mais là je ne fais que supposer).

    Si c'est une entité par enfant, dans ce cas voilà les relations qui devraient apparaitre :
    • Un enfant possède un cahier de note, un cahier de note ne correspond qu'à un enfant => Relation CahierNote/Enfant OneToOne.
    • Un cahier de notes possède plusieurs notes : une note n'apparait que dans un cahier de note => Relation CahierNote/Note OneToMany.


    Je pense que tu n'as pas besoin de plus. La collection correspondra à toutes les notes d'un cahier de note.

    Ou alors, tu zappes totalement l'entité cahier de notes, et tu fais une relation directe entre Enfant et Note => OneToMany.

    Quelle que soit la solution que tu choisis, il ne faut pas qu'il y aie de redondance dans tes relations : un cahier de note ne peut pas être lié à une note si l'enfant est lié au cahier de note ET à la note.

    Revois déjà ton modèle pour être sur d'avoir les bonnes relations, poste nous éventuellement les relations que tu as, mais avant de passer aux formulaires il faut être bien sur que ton schema tienne la route.

    ++

  5. #5
    Membre confirmé
    Inscrit en
    Août 2002
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 94
    Par défaut Merci encore
    Voici des informations qui pourrait d'éclairer sur ce petit projet perso.
    J'aimerais avoir la liste de mes élèves qui sont déjà inscrit dans la base de données, sur une page de façon vertical avec une case de type input pour écrire les résultat à un examen. Donc exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <form method="" action="">
    Élève 1<input type"text">
    Élève 2<input type"text">
    Élève 3<input type"text">
    Élève 4<input type"text">
    Élève 5<input type"text">
    Élève 6<input type"text">
    <button type="submit">
    </form>
    voici ce que j'ai fait dans mes entity
    Dans l'entity enfant:
    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
     
     
     
    /**
         * @ORM\OneToMany(targetEntity="Tic\GestionBundle\Entity\Notes", mappedBy="id")
         * 
         */
        private $note;
     
     
        public function __construct()
        {
        $this->note = new ArrayCollection();
     
     
        }
     
        /**
         * Add note
         *
         * @param \Tic\GestionBundle\Entity\Notes $note
         * @return Enfants
         */
        public function addNote(\Tic\GestionBundle\Entity\Notes $note)
        {
            $this->note[] = $note;
     
            return $this;
        }
     
        /**
         * Remove note
         *
         * @param \Tic\GestionBundle\Entity\Notes $note
         */
        public function removeNote(\Tic\GestionBundle\Entity\Notes $note)
        {
            $this->note->removeElement($note);
        }
     
        /**
         * Get note
         *
         * @return \Doctrine\Common\Collections\Collection 
         */
        public function getNote()
        {
            return $this->note;
        }
    Dans Twig j'ai ajouter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {{form_row(form.note)}}
    Rien apparaît Et pour ce qui est des noms des jeunes je ne comprends pas bien comment faire.

    Est-ce dans le formulaire enfants ou dans le formulaire note.
    Est-ce une collection d'enfant ou un collection de note.

    Je sais que je ne suis pas très clair mais je pense me débrouiller avec symfony( la doc aide beaucoup) mais ce question sur laquelle tu me donnes un coup de main j'essai de trouver la réponse depuis un bon bout de temps sans succèes. Je sais comment ajouter des champs de façonc dynamique avec java script en cliquant sur un bouton mais faire une liste de noms avec des cases input a coté je ne sais pas.

    J'espère être clair j'aimerais vraiment comprendre comment faire ce petit bout pour terminer mon application pour la gestion de ma classe.

    Merci

  6. #6
    Membre Expert 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 : 37
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Par défaut
    Je ne peux pas deviner ton schema, encore moins ton besoin.
    Comme je te l'ai dit avant, arrête de te focaliser sur ton formulaire et assure toi que ton modèle soit correct. Si ce n'est pas le cas, ça ne sert à rien d'essayer de faire des formulaires.

    Tu veux lister tous les élèves soit, ça va compliquer un tout petit peu la chose mais admettons.
    Un cahier de notes c'est quoi ?
    • toutes les notes de tous les examens de tous les élèves ?
    • la note à un examen pour tous les élèves ?
    • autre chose ...?

    C'est ça qui va définir ton modèle. Quand tu connaitras les relations entre tes entités, on pourra causer formulaires.

Discussions similaires

  1. [1.x] symfony: formulaire en prod
    Par symfony dans le forum Débuter
    Réponses: 0
    Dernier message: 29/09/2011, 19h54
  2. [1.x] Symfony formulaire multiple type facture
    Par sipap dans le forum Symfony
    Réponses: 5
    Dernier message: 13/09/2011, 23h34
  3. [1.x] symfony formulaire instancier
    Par benhsaien dans le forum Débuter
    Réponses: 1
    Dernier message: 22/06/2011, 12h34
  4. [1.x] symfony formulaire conseil.
    Par benhsaien dans le forum Débuter
    Réponses: 11
    Dernier message: 13/06/2011, 15h26

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