Formulieren maken

Het maken van een formulier

Formulieren kan je op verschillende manieren maken, meestal is een formulier onderdeel van een CRUD oplossing en is daarmee gelinkt aan een Entity (of Model). Als dit zo is kan je met een symfony commando vrij makkelijk een nieuw formulier maken.
De basis van een formulier vind je in de map src/Form. Formulieren in Symfony zijn Type classes en daarom eindigen deze altijd op het woordje Type. Het maken van een formulier doe je met het Symfony commando
symfony console make:form
Je kan ook als je wilt, net als bij het maken van een Entity bij het commando ook meteen de naam van de Type meegeven, doe je dit niet zal er om gevraagd worden.
LET OP: Het is belangrijk dat je eindigt met het woord Type in de naam. Dus UserType of OrderType dit valt onder de code-conventie

# symfony console make:form UserType

 The name of Entity or fully qualified model class name that the new form will be bound to (empty for none):
 > User

 created: src/Form/UserType.php


  Success!


 Next: Add fields to your form and start using it.
 Find the documentation at https://symfony.com/doc/current/forms.html
Een voorbeeld van het maken van een formulier

Een leeg formulier maken

Je kan ook een leeg formulier maken, bijvoorbeeld bij een contactpagina als je niets wilt opslaan maar de gebruiker en een ontvanger alleen zou willen mailen, of als je een aantal zaken wilt combineren. In dat geval laat je de vraag over de gekoppelde entity
The name of Entity or fully qualified model class name that the new form will be bound to (empty for none):
lekker leeg (als je leest staat het er ook :-)).

De verzendknop toevoegen

Als je het bestand opent (in de map src/Form) dan heb je een functie die heet buildForm. In deze functie heb je een $builder variabele en die voegt standaard alle velden uit de database toe, deze velden komen ook zo terug als invoervelden in jouw formulier.

public function buildForm(FormBuilderInterface $builder, array $options): void
{
    $builder
        ->add('email')
        ->add('roles')
        ->add('password')
        ->add('name')
        ->add('date_of_birth')
    ;
}
Een voorbeeld van de buildForm functie
Je kan hier van alles aan toevoegen met de ->add('') methode.
Om een verzendknop toe te voegen doorloop je twee stappen.
Als eerste moet je de SubmitType toevoegen aan de use-space van het bestand
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
Daarna kan je onderaan (na het laatste veld, boven de punt-komma) het volgende toe te voegen:
->add('submit', SubmitType::class, ['label' => 'Toevoegen'])
Er zitten drie onderdelen in de ->add('') methode, gescheiden door een komma:
  • 'submit' is de naam, die komt terug in het invoerveld
  • SubmitType::class is de verwijzing wat voor inveroveld het is (in dit geval een submit)
  • ['label' => 'Toevoegen'] zorgt er voor dat de naam/ waarde van de knop van submit veranderd naar Toevoegen
Meer over deze opties vind je in de pagina over het aanpassen van formulieren.

Het formulier tonen

Om een formulier te tonen moet je twee stappen ondernemen.

  • Het formulier in een Controller aanroepen
  • Het formulier in een TWIG-bestand tonen

Het formulier aanroepen

Als eerste moet je de gemaakte FormType aanroepen in de use-space van de Controller en het is meteen ook handig om de EntityManager in de use-space te zetten, deze hebben we bij het verwerken van het formulier nodig..

//use-space in de Controller
use App\Form\BookType;
use Doctrine\ORM\EntityManagerInterface;
Daarna kan je het formulier aanroepen in de functie met de code
$form = $this->createForm(BookType::class);
De variabele van het formulier kan je vervolgens mee geven aan het TWIG-bestand.
return $this->render('book/add.html.twig', [
    'form' => $form
]);
Voorbeeld van het meesturen van een formulier

De volledige code

//Use-space in de Controller
use App\Form\BookType;
use Doctrine\ORM\EntityManagerInterface;

//Functie om een boek toe te voegen verder op
public function add(Request $request, EntityManagerInterface $entityManager): Response
{
    $form = $this->createForm(BookType::class);

    return $this->render('book/add.html.twig', [
        'form' => $form
    ]);
}
Voorbeeld van een functie met een formulier

Het formulier tonen

Het tonen van het formulier in je TWIG-bestand is eenvoudig, je hoeft alleen maar na de basis opmaak de volgende code toe te voegen.
{{ form(form) }}

Aangepaste formulieren

Deze oplossing geeft een kale/ leeg formulier. Lees ook de paragraaf over aangepaste formulieren maken, daarin leer je hoe een formulier er beter uit kan zien, hoe je velden aanpast en je ook bijvoorbeeld een Bootstrap formulier kan maken, of helemaal zelf kan stijlen.