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
    ]);
}