Controllers in Symfony

Wat is een Controller

Een Controller is het hart van jouw applicatie. In een Controller worden alle gegevens verwerkt, staan de routes naar je pagina's en wordt data opgehaald, gecontroleerd en opgeslagen in de database.
Waar nodig kan een Controller ook andere dingen doen zoals het verzenden van een e-mail of data uit een andere applicatie ophalen (API) of verzenden. Denk bijvoorbeeld aan een connectie met het betaalsysteem van Mollie (/iDEAL)

Een nieuwe controller aanmaken

Om een controller aan te maken heb je in de basis het symfony commando nodig symfony console make:controller [ControllerName]. Je kan de naam van de Controller direct meegeven, als je dit niet doet zal Symfony om de naam van jouw controller vragen.

# symfony console make:controller Book
 created: src/Controller/BookController.php
 created: templates/book/index.html.twig


  Success!


 Next: Open your new controller class and add some pages!
Het aanmaken van een Controller is kinderlijk eenvoudig
Zoals je kan lezen wordt er met het maken van een Controller meteen twee bestanden aangemaakt, de Controller zelf in src/Controller/BookController.php en een TWIG bestand in templates/book/index.html.twig
Als je jouw controller bekijkt zal er meteen een basis route naar een index.twig.html gecreeerd zijn.
<?php
namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class BookController extends AbstractController
{
   #[Route('/book', name: 'app_book')]
   public function index(): Response
   {
       return $this->render('book/index.html.twig', [
           'controller_name' => 'BookController',
       ]);
   }
}
Een basis Controller nadat Symfony die aangemaakt heeft

Controllers worden enkelvoudig geschreven!

Hoe noem je jouw controller?

Door de vrijheid van Symfony kan je een Controller alle namen van de wereld geven. De vraag is vooral wat doet! je Controller.
Veelal hebben Entities (Models) een eigen controller, zeker als er voor de Entity ook een CRUD gemaakt moet worden. Alle functies (methods) van de Entity zitten dan in die Controller.
Soms heb je ook speciale Controllers die specifiek iets zeggen over een rol of afhandeling in jouw applicatie.
Een AdminController kan gemaakt worden voor alle routes die iemand met een rol ROLE_ADMIN heeft.
Een SecurityController kan gemaakt worden voor het afhandelen van beveiligingsopties bijvoorbeeld het inloggen en uitloggen.

Belangrijkste vraag

De belangrijkste vraag die bij de naam van een Controller komt kijken is wat ga je er mee doen en is het kies voor dat wat er gaat gebeuren of wat het doet een logische naam. Net als dat je bij een route een logische route-naam kiest. Denk hier van te voren GOED over na!
Een aantal belangrijke dingen om mee te nemen:

  • Een Controller is altijd enkelvoud
  • Een Controller is (bijna) altijd een woord met Controller er aan vast.
      Er zijn uitzonderingen, maar denk er goed overna!
  • Een Controller is nooit een afkorting, maak lievere een langere bestandsnaam