MBO-SD : De site voor software developer in het MBO
Formulieren met keuzemenu
Soms heb je een keuze
Er zijn momenten waarop gebruikers een keuze hebben bij het invullen van een formulier in jouw
applicatie, dan heb je de ChoiceType
optie in een formulier.
In onderstaand voorbeeld heb je een bestelformulier waarbij het product in de Controller al
bekend is, in dit geval een pizza, maar je kan nog wel de grote kiezen. De gekozen grote is een
string
of varchar
in de database, we slaan alleen de naam op van de gekozen
grote. Maar de gebruiker krijgt drie keuzes, small
, regular
(deze kost 2 Euro extra)
en large
(deze kost 4 Euro extra).
Het standaard formulier
Als je een formulier maakt metsymfony console make:form
zal het veld
size
een TextType geven en geen ChoiceType
. Het standaard formulier met
submit-button zal er dan zo uitzien:
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('firstname')
->add('lastname')
->add('address')
->add('size')
->add('submit', SubmitType::class, ['label' => 'Bestel deze pizza'])
;
}
Een standaard formulier zonder keuze, met submit button
We gaan natuurlijk dit sowieso niet gebruiken, we passen de labels-toe om het wat mooier te maken:
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('firstname', null, ['label' => 'Wat is je voornaam?'])
->add('lastname', null, ['label' => 'Wat is je achternaam?'])
->add('address', null, ['label' => 'Wat is je adres?'])
->add('size', null, ['label' => 'Hoe groot wil jij jouw pizza?'])
->add('submit', SubmitType::class, ['label' => 'Bestel deze pizza'])
;
}
Het formulier met nette labels
Bovenstaand voorbeeld heb je al een mooier formulier welke we kunnen gebruiken. Maar de grote van de pizza
het size
veld is nu wel opgemaakt, maar nog geen keuze menu. We gaan daarvoor de null
in de ->add('size', null, ['label' => 'Hoe groot wil jij jouw pizza'])
vervangen door een
ChoiceType
.
Als eerste moet je in de use-space van het bestand de volgende regel toe voegen:
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
Dit zorgt ervoor dat je de
ChoiceType
ook kan gebruiken.
Opties van de ChoiceType
Als je een ChoiceType wilt gebruiken moet je ook de keuzes meegeven in het derde argument van de->add()
methode.
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('firstname', null, ['label' => 'Wat is je voornaam?'])
->add('lastname', null, ['label' => 'Wat is je achternaam?'])
->add('address', null, ['label' => 'Wat is je adres?'])
->add('size', ChoiceType::class, ['label' => 'Kies je maar',
'choices' => [
'Groot +4 Euro' => 'large',
'Normaal +2 Euro' => 'regular',
'Klein' => 'small',
],
])
->add('submit', SubmitType::class, ['label' => 'Bestel deze pizza'])
;
}
Formulier met 3 keuzes
De choices
key heeft als waarde weer een array met daarin de naam die getoond wordt
in het <option> element van het select
element welke aangemaakt wordt. De waarde
van de array is vervolgens de value
van het <option> element. Bovenstaande zal dus een
select element geven:
Een standaard waarde meegeven
Net als bij eenTextType
kan je ook een standaard waarde meegeven die standaard dan
geselecteerd zal zijn. Stel voor dat ik altijd een normale
pizza wil laten bestellen en
gebruikers de keuze voor groot en klein laten maken. Dan kan je met de data
key dit aan de
array ook weer meegeven.
//In de use-space zet je de volgende regels
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
//De class OrderType
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('firstname', null, ['label' => 'Wat is je voornaam?'])
->add('lastname', null, ['label' => 'Wat is je achternaam?'])
->add('address', null, ['label' => 'Wat is je adres?'])
->add('size', ChoiceType::class, ['label' => 'Kies je maar',
'choices' => [
'Groot +4 Euro' => 'large',
'Normaal +2 Euro' => 'regular',
'Klein' => 'small',
],
'data' => 'regular',
])
->add('submit', SubmitType::class, ['label' => 'Bestel deze pizza'])
;
}
Formulier met 3 keuzes en standaard regular gekozen
Dit geeft het volgende select-element: