Registereren van gebruikers

Controleer de User.php entity

Controleer als eerste of de package PasswordAuthenticatedUserInterface in de use space staat. Hier onder vind je hoe (ongeveer) de src/entity/User.php er ongeveer uit zou moeten zien.

// ...
use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;

class User implements UserInterface, PasswordAuthenticatedUserInterface
{
Als de start van de src/Entity/User.php deze regels laat zien, ben je goed op weg!

Het registratie formulier en de RegistrationController

Om je als gebruiker te kunnen registeren hebben we twee bestanden/ oplossingen nodig. Voor de routes van het inloggen gebruiken we de RegistrationController en voor het registreren zelf maken we een registratiepagina aan in de templates map. Om je hierbij te helpen heb je de volgende twee commando's nodig.

composer require symfonycasts/verify-email-bundle
Dit heb je nodig als je zou willen werken met email verificatie emails. Dit gaan we voor nu nog niet doen, maar het is handig om deze alvast geinstalleerd te hebben.
symfony console make:registration-form
Na dit commando krijg je een aantal vragen, zie hier onder hoe je die het beste kan beantwoorden/ wat je kan doen.

LET OP! Bij de vraag Do you want to send an email to verify the user's email address after registration? (yes/no) [yes]: kies je niet voor het standaaard antwoord maar je kiest voor no. In deze uitleg en in jouw omgeving is het nog niet mogelijk of nodig dat er een email verificatie mail gestuurd wordt.

LET OP 2! Bij de vraag What route should the user be redirected to after registration?: dien je goed naar de routes te kijken en een juiste route te kiezen waar gebruikers naar toe gestuurd worden nadat zij geregistreerd zijn!

LET OP 3! Bij de vraag of je een UniqueEntity wilt gebruiken kies je ja! Dit is de vraag Do you want to add a #[UniqueEntity] validation attribute to your User class to make sure duplicate accounts aren't created? (yes/no) [yes]: De reden hiervoor is dat je namelijk niet wilt dat een gebruiker met hetzelfde email adres meerdere keren in jouw systeem staat.

symfony console make:registration-form
 Creating a registration form for App\Entity\User

 Do you want to add a #[UniqueEntity] validation attribute to your User class to make sure duplicate accounts aren't created? (yes/no) [yes]:
 > yes

 Do you want to send an email to verify the user's email address after registration? (yes/no) [yes]:
 > no

 Do you want to automatically authenticate the user after registration? (yes/no) [yes]:
 > yes

 ! [NOTE] No authenticators found - so your user won't be automatically authenticated after registering.

 What route should the user be redirected to after registration?:
  [0 ] _preview_error
  [1 ] _wdt
  [2 ] _profiler_home
  [3 ] _profiler_search
  [4 ] _profiler_search_bar
  [5 ] _profiler_phpinfo
  [6 ] _profiler_xdebug
  [7 ] _profiler_font
  [8 ] _profiler_search_results
  [9 ] _profiler_open_file
  [10] _profiler
  [11] _profiler_router
  [12] _profiler_exception
  [13] _profiler_exception_css
  [14] app_index
 > 14

 updated: src/Entity/User.php
 created: src/Form/RegistrationFormType.php
 created: src/Controller/RegistrationController.php
 created: templates/registration/register.html.twig

  Success!
Als je zelf een gebruiker in de database wilt invoeren (bijvoorbeeld via PHPMyAdmin) dan kan je een gekozen wachtwoord ook via de terminal laten hashen met het volgende commando:
symfony console security:hash-password
Voor nu is het niet nodig, we gaan direct met de registratie-pagina aan de gang.

Als je nu naar jouw applicatie gaat, lokaal op bijvoorbeeld http://localhost:8000/register zal je de registratiepagina te zien krijgen.

De registratie pagina aanpassen

Als je de vorige stappen goed doorlopen hebt zijn er drie nieuwe bestanden gemaakt en is er een geupdate. Aan het einde van het make:registration-form commando zal Symfony het volgende gemeld hebben:

  • updated: src/Entity/User.php
  • created: src/Form/RegistrationFormType.php
  • created: src/Controller/RegistrationController.php
  • created: templates/registration/register.html.twig
Als je er voor gekozen hebt om een aantal velden toe te voegen aan de User entity dan moet je die velden ook toevoegen aan de registratie pagina. Daarvoor kan je het bestand templates/registration/register.html.twig naar hartelust aanpassen.

BELANGRIJK! Pas de RegistrationController aan

Het lijkt erop dat er een foutje in Symfony zit met het aanmaken van het registratie formulier. Hierdoor worden de standaard fouten niet getoond in het formulier. Hiervoor dien je een kleine aanpassing te maken in de RegistrationController.
Aan het einde van de register methode (function) bij de return $this->render(... staat nu:
'registrationForm' => $form->createView(),
De createView() property moet weg, je moet alleen $form door sturen.

return $this->render('registration/register.html.twig', [
    'registrationForm' => $form,
]);
De juiste manier om errors te tonen in je registratie formulier