MBO-SD : De site voor software developer in het MBO
Formulieren met een relatie (Entity-relation)
Formulieren met een relatie
Soms wil je iets toevoegen of aanpassen waarbij er sprake is van een relatie. In dit voorbeeld hebben
we twee relaties. Book
waarin boeken zitten en een boek heeft een Author
die
het boek geschreven heeft. Voor de simpelheid van dit voorbeeld is het een ManyToOne
relatie
waarbij een auteur meerdere boeken kan schrijven en een boek altijd maar een auteur heeft.
Het standaard formulier ziet er dan zo uit:
//De volgende regels staan in de use-space
use App\Entity\Author; //Connectie naar de Author entity
use App\Entity\Book; //Connectie naar de Book entity
use Symfony\Bridge\Doctrine\Form\Type\EntityType; //De EntityType
//In de BookType class
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('name')
->add('description')
->add('author', EntityType::class, [
'class' => Author::class,
'choice_label' => 'id',
])
;
}
Het standaard aangemaakte formulier voor het toevoegen van een boek
Er komt nu een select-menu in het formulier die de keuze geeft van alle rijen uit de Author entity (of author
tabel in de database). Maar standaard zie je niet de naam maar de id van het veld. Dit willen we niet. De entity
heeft een attribuut name
wat de naam van de auteur weergeeft.
Dit voorbeeld heeft ook nog geen
labels
en geen submit
knop. Deze gaan we allemaal toevoegen:
//De volgende regels staan in de use-space
use App\Entity\Author; //Connectie naar de Author entity
use App\Entity\Book; //Connectie naar de Book entity
use Symfony\Bridge\Doctrine\Form\Type\EntityType; //De EntityType
use Symfony\Bridge\Doctrine\Form\Type\SubmitTyoe; //De SubmitType voor de button
//In de BookType class
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('name', null, ['label' => 'Naam van het boek'])
->add('description', null, ['label' => 'Samenvatting van het boek']))
->add('author', EntityType::class, [
'class' => Author::class,
'choice_label' => 'name',
'label' => 'Wie is de auteur?'
])
->add('submit', SubmitType::class, ['label' => 'Voeg dit boek toe']))
;
}
Een voorbeeld van een mooi formulier met de relatie