MBO-SD : De site voor software developer in het MBO
Formulier afhandelen
Het formulier afhandelen
In de vorige twee paragrafen heb je geleerd hoe je een formulier maakt en deze kan controleren of
het verstuurd is en de data klopt. In deze paragraaf gaan we verder kijken hoe we de data kunnen
afhandelen. In ons voorbeeld is er nog steeds een entity
Book waar we mee werken en
zullen deze dan ook als zodanig gaan opslaan.
Verwerken in vijf stappen
Om de data te verwerken gebruiken we vijf stappen, waarvan een niet verplicht is.
- Ophalen van de data uit het formulier
- Voorbereiden van de data in de
EntityManager
- Verwerken van de
EntityManager
- Maken van een
flash-message
(niet verplicht) - Routeren naar de overzichtspagina na het opslaan
Ophalen van de data uit het formulier
Omdat we het formulier aan maken vanuit de BookType
weet het formulier al dat
we met de entity van Book
werken. De data in het formulier wordt als zodanig
ook opgeslagen. De data in het formulier is meteen een nieuwe Book
entity.
Het ophalen van de data doe je met het volgende commando:
$book = $form->getData()
De variabele $book
bevat nu een entity van het Book model.
Als je dit wilt controleren kan je een dd()
(dump-and-die) op de variabele
van het book doen. dd($book);
Voorbereiden van de data in de EntityManager
Omdat de code meteen in een Entity
zit van Book, kunnen we deze direct aanbieden via
de EntityManager
. Deze hebben we in de vorige oefening al in de add-functie gezet in
onze controller.
$entityManager->persist($book);
Met de ->persist()
methode bereiden we het invoeren in de database voor.
Verwerken van de EntityManager
Als laatste gaan we de voorbereide data in de EntityManager
doorspoelen, de voorbereide
data wordt dan pas echt in de database gezet.
$entityManager->flush();
Maken van een flash-message
(niet verplicht)
We willen graag dat onze gebruiker een bericht krijgen dat we iets gedaan hebben. Door het maken van
flash-messages
kunnen we dit makkelijk doen. Deze stap is niet verplicht, maar wel handig om
te weten/ uit te voeren.
$this->addFlash('success', 'Het boek is toegevoegd');
De ->addFlash()
functie heeft twee parameters, een het type (de label) van het bericht in
het voorbeeld success
en het tweede is het bericht zelf Het boek is toegevoegd
.
Het tonen van de flash-message
Om de flash-message te tonen kan je in de base.twig.html
of in een andere twig
pagina de volgende code zetten:
{% for label, messages in app.flashes %}
{% for msg in messages %}
{{ msg }}
{% endfor %}
{% endfor %}
success
. Zo wordt, als je Bootstrap gebruikt, het bericht meteen netjes opgemaakt.
Routeren naar de overzichtspagina na het opslaan
Na het toevoegen van een boek willen we niet terug komen op de pagina om (nog) een boek toe te
voegen maar willen we een routering maken naar het overzicht van alle boeken. De naam van die route
in ons voorbeeld is app_book
en daar gaan we de routering naar toe zetten.
return $this->redirectToRoute('app_book');
Deze code zet je IN de if-statement, niet er na of erbuiten.
Meer over routeren lees je in het hoofdstuk van Routeren
.
De gehele functie
//Use-space in de Controller
use App\Form\BookType;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
//Functie om een boek toe te voegen verder op
public function add(Request $request, EntityManagerInterface $entityManager): Response
{
$form = $this->createForm(BookType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$book = $form->getData();
$entityManager->persist($book);
$entityManager->flush();
$this->addFlash('success', 'Het boek is toegevoegd');
return $this->redirectToRoute('app_book');
}
return $this->render('book/add.html.twig', [
'form' => $form
]);
}