Abbiamo visto in precedenza come il componente MakeBundle
ci abbia consentito di creare una pagina di login con Symfony funzionante con uno sforzo davvero ridotto in termini di stesura del codice. A questo punto, possiamo dedicarci alla pagina di registrazione per consentire agli utenti di registrarsi sulla piattaforma.
Creare la Form di registrazione
Sono pochi gli step necessari per creare il form di registrazione, la parte che richiederà un po’ più di lavoro è quella relativa alla personalizzazione dell'aspetto visuale.
Iniziamo lanciando il seguente comando all'interno del container, decidendo se necessitiamo di una messaggio di posta elettronica per la conferma e se vogliamo che l'utente sia automaticamente loggato dopo la registrazione:
$ ./bin/console make:registration-form
Creating a registration form for App\Entity\User
Do you want to add a @UniqueEntity validation annotation on your User class to make sure duplicate accounts aren't created? (yes/no) [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
updated: src/Entity/User.php
created: src/Form/RegistrationFormType.php
created: src/Controller/RegistrationController.php
created: templates/registration/register.html.twig
Success!
Next:
Make any changes you need to the form, controller & template.
Then open your browser, go to "/register" and enjoy your new form!
Al termine del comando avremo alcuni nuovi file ed una modifica all'entità User
. Partiamo da quest'ultima:
* @UniqueEntity(fields={"email"}, message="There is already an account with this email")
L'annotation di Doctrine proposta nel codice precedente ci garantisce che quello relativo all'indirizzo email sarà un campo univoco e che non possono esserci più utenti con lo stesso recapito di posta elettronica.
Gli altri file generati dal comando sono invece:
app/src/Controller/RegistrationController.php
che contiene la logica di creazione dell'utente nonché il login automatico al termine dell’operazione;app/src/Form/RegistrationFormType.php
che definisce i campi contenuti dal form di registrazione con le relative constraints, ovvero le regole di validazione. Approfondiremo poco più avanti i form di Symfony, per ora è importante sapere che sono degli oggetti che permettono di gestire i form HTML dalla loro creazione alla gestione dei contenuti;app/templates/registration/register.html.twig
che contiene il template della pagina, tra cui il rendering della form
Prima di approfondire il contenuto del controller possiamo provare il nostra form di registrazione. Da utente non autenticato, se apriamo la pagina http://kvak.local/register
otteniamo un redirect alla pagina per il Login; questo avviene perché dobbiamo modificare il file security.yaml
affinché consenta l'accesso alla pagina di registrazione anche per gli utenti anonimi:
access_control:
- { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: ROLE_USER }
Dopo aver effettuato tale modifica possiamo provare ad effettuare una registrazione di prova.