Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

L'entità User

Dopo l'implementazione del processo di login e registrazione dedichiamoci ad aggiungere i campi necessari per il funzionamento del profilo utente
Dopo l'implementazione del processo di login e registrazione dedichiamoci ad aggiungere i campi necessari per il funzionamento del profilo utente
Link copiato negli appunti

Ora che abbiamo il processo di login e registrazione funzionanti, possiamo dedicarci ad aggiungere gli altri campi necessari al corretto funzionamento del profilo utente.

I campi che andremo a creare per il nostro utente sono:

  • fullName: stringa che può essere anche nulla;
  • avatar: stringa che può essere anche nulla;
  • createdAt: datetime che conterrà la data di creazione dell’utente.

Per aggiungere campi ad un'entità esistente possiamo utilizzare uno dei comandi del MakerBundle, il make:entity che consente di creare nuove entità o aggiornarne di esistenti.

Prima di iniziare con le operazioni ripuliamo il database per evitare di avere errori durante l'esecuzione delle migrazioni:

./bin/console doctrine:database:drop --if-exists --force
./bin/console doctrine:database:create --no-interaction
./bin/console doctrine:migrations:migrate  --no-interaction

Lanciamo ora il ./bin/console make:entity, indichiamo il nome della classe User e il tool ci dirà che, esistendo già, possiamo aggiungere nuovi campi. Indicando il nome del campo, il tool proverà a dedurre il tipo di dato suggerendolo; qualora non fosse quello corretto potremmo in ogni caso indicare quello corretto o premere ? per scegliere tra quelli supportati.

Per accettare i suggerimenti possiamo premere il pulsante di Invio per procedere automaticamente. Questo l'output atteso nel nostro caso:

$ ./bin/console make:entity
 Class name of the entity to create or update (e.g. GrumpyElephant):
 > User
 Your entity already exists! So let's add some new fields!
 New property name (press <return> to stop adding fields):
 > fullName
 Field type (enter ? to see all types) [string]:
 >
 Field length [255]:
 > 50
 Can this field be null in the database (nullable) (yes/no) [no]:
 > yes
 updated: src/Entity/User.php
 Add another property? Enter the property name (or press <return> to stop adding fields):
 > avatar
 Field type (enter ? to see all types) [string]:
 >
 Field length [255]:
 >
 Can this field be null in the database (nullable) (yes/no) [no]:
 > yes
 updated: src/Entity/User.php
 Add another property? Enter the property name (or press <return> to stop adding fields):
 > createdAt
 Field type (enter ? to see all types) [datetime]:
 >
 Can this field be null in the database (nullable) (yes/no) [no]:
 >
 updated: src/Entity/User.php
 Add another property? Enter the property name (or press <return> to stop adding fields):
 >
  Success!
 Next: When you're ready, create a migration with php bin/console make:migration

Il comando ci suggerisce, al termine dell'esecuzione, di creare una migrazione. Seguiamo il suggerimento lanciando il comando e poi, prima di proseguire facendo girare la migrazione, effettuiamo una piccola modifica alla nostra entità. Creiamo un costruttore per l'entità User in maniera da inizializzare la proprietà createdAt:

public function __construct()
{
  $this->createdAt = new \DateTimeImmutable();
}

A questo punto possiamo far girare la migrazione con il comando bin/console doctrine:migrations:migrate.

Giunti a questo punto, se diamo un’occhiata alla tabella nel nostro database noteremo che sono stati aggiunti i nuovi campi come da noi richiesto. Possiamo quindi ricreare le fixtures, non prima di aver personalizzato i nuovi campi all'interno della class App\DataFixtures\AppFixtures:

$ryan = new User();
//...
$ryan->setFullName('Ryan');
$ryan->setAvatar('assets/img/ryan.jpg');  
$julie = new User();
//...
$julie->setFullName('Julie');
$julie->setAvatar('assets/img/julie.jpg');

Avendo spesso la necessità di ricreare l'ambiente locale da zero, ho creato per comodità uno script dentro composer che ci permetterà di cancellare automaticamente il database, ricrearlo da zero, applicare le migrazione e caricare le fixtures. Per creare nuovamente gli utenti possiamo quindi lanciare il comando:

composer run fixtures

Se siete curiosi di vedere cosa fa il comando potete spulciare il file composer.json nella sezione scripts e guardare i comandi eseguiti per la proprietà fixtures.

Sostituire le proprietà nei template

Ora che supportiamo le nuove proprietà dell'entità User possiamo aggiornare il nostro Twig affinché carichi dinamicamente il nome utente e l'avatar in home page.

L'utente corrente è accessibile in Twig attraverso la proprietà app.user, quindi apriamo il file app/templates/home/index.html.twig ed effettuiamo le seguenti sostituzioni:

<div class="container">
   <div class="photo-container">
       <img src="{{ asset(app.user.avatar) }}" alt="">
   </div>
   {% if app.user.fullName %}<h3 class="title">{{ app.user.fullName }}</h3>{% endif %}
   <p class="category">{{ app.user.email }}</p>
</div>

Dato che l'avatar è opzionale, potremmo modificare il metodo getAvatar nella entity per restituire un default quando non è presente:

public const DEFAULT_AVATAR = 'assets/img/default-avatar.png';
public function getAvatar(): ?string
{
  return $this->avatar ?? self::DEFAULT_AVATAR;
}

Ora che abbiamo tutti i campi di cui abbiamo bisogno, possiamo dedicarci alla creazione di una form per consentire all'utente di modificarli. Il codice della lezione è disponibile con il tag user-entity.

Ti consigliamo anche