MBO-SD : De site voor software developer in het MBO
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 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')
;
}
->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
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
]);
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
]);
}
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.