Bonjour,

Je souhaite mettre en forme les champs d'un formulaire contenant plusieurs instances d'une même entité.

Pour l'instant j'ai ça :
https://i.postimg.cc/KvDfmV92/form.png

Mais je souhaiterais que chaque champs d'une instance soit sur la même ligne...
Et que le label soit le nom de l'instance (plutôt que la position de l'instance dans le tableau)

Le code du controller avec le createForm()

Très simple, je crée juste le formulaire en passant un collectionType contenant les données des jeux :

public function editAllGames(Request $request, GamesRepository $gamesRepository): Response
    {
    // recupere 100 jeux
        $games = $gamesRepository->getAll();

        $form = $this->createForm(CollectionType::class, $games, [
            'entry_type' => GameType::class
        ])
            ->add('submit', SubmitType::class)
        ;

        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {

            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->flush();

            return $this->redirectToRoute('admin/users/edit.html.twig');
        }

        return $this->render("admin/edit-all-games.html.twig", [
            "form" => $form->createView(),
//            "games" => $games,
        ]);
    }

le builder qui défini les champs à modifer des instances:

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name', TextType::class, [
                'label' => false
            ])
            ->add('type', EntityType::class, [
                'label' => false,
                'class' => Types::class,
                'choice_label' => 'name'
            ])
            ->add('reference', TextType::class, [
                'label' => false
            ])
        ;
    }

que mettre entre les "balises" form_start et form_end pour pour modifier l'affichage des champs ?

{{ form_start(form) }}
    ???
{{ form_end(form) }}

Merci d'avance pour votre aide !

2 réponses


Salut,

Voici un lien pour personnaliser ton affichage et mettre en forme le label, le champ de formulaire et la gestion des erreurs

  {{ form_start(form) }}
      <div class="form-control">
          <i class="fa fa-calendar"></i> {{ form_label(form.dueDate) }}
          {{ form_widget(form.dueDate) }}

          <small>{{ form_help(form.dueDate) }}</small>

          <div class="form-error">
              {{ form_errors(form.dueDate) }}
          </div>
      </div>
  {{ form_end(form) }}

How to Customize Form Rendering

-kl-
Auteur

Merci de la tentative bidule !
Bon j'ai pas dû être très clair par contre...

J'ai trouvé un façon de faire, ca doit pas etre la maniere la plus clean, mais ca fonctionne :

{{ form_start(form) }}
    {% for child in form.children %} // quand on se sert d'un CollectionType::class les forms enfants sont dans un tableau children
        {% if not child.children | length != 4  %} // mais dans ce tableau il y a aussi 2 entrées ("submit" et "token") qui ne contiennent donc pas les infos des instances
        {{ form_label(child.children.ludoTop) }} // du coup on accede aux propriétées des instances avec child.children.nomDeLaPropriété (children est un tablea contenant les props)
        {% endif %}
    {% endfor %}
{{ form_end(form) }}