Dans de nombreux sites, nous aurons besoin d'une page profil pour les utilisateurs.
Dans cette page, les utilisateurs auront accès aux contenus qu'ils auront créés sur le site.
Nous allons commencer par ajouter quelques informations dans l'entité Users afin d'avoir des informations personnalisées.
Au moyen de la commande
symfony console make:entity
Nous allons ajouter le nom (name) et le prénom (firstname) de l'utilisateur.
Seront ensuite exécutées les commandes
symfony console make:migration
symfony console doctrine:migrations:migrate
Sécurité
Nous allons ajouter une sécurité à l'accès à la route "/users" qui est dans "UsersController", nécessitant que l'utilisateur soit connecté pour y accéder.
Nous allons donc dans le fichier security.yaml (dans config/packages) modifier la partie "access_control" comme ci-dessous
# Easy way to control access for large sections of your site
# Note: Only the *first* access control that matches will be used
access_control:
# - { path: ^/admin, roles: ROLE_ADMIN }
- { path: ^/users, roles: ROLE_USER }
A compter de cet instant, l'accès à la route /users est protégé.
Mise en place du contrôleur
Pour accéder aux informations de l'utilisateur connecté, nous n'avons pas besoin de traitement dans le contrôleur. Il nous suffit de créer une méthode comme ceci.
/**
* @Route("/users", name="users")
*/
public function index()
{
return $this->render('users/index.html.twig');
}
Mise en place de la vue
Nous allons accéder aux différentes informations de l'utilisateur directement dans le fichier twig.
Affichage des informations de l'utilisateur
Nous pourrons accéder aux informations de l'utilisateur en utilisant "app.user" suivi du nom du champ que nous souhaitons afficher.
<p>Nom : {{ app.user.name }}</p>
<p>Prénom : {{ app.user.firstname }}</p>
<p>E-mail : {{ app.user.email }}</p>
Affichage des annonces de l'utilisateur
Nous pourrons accéder aux annonces de l'utilisateur grâce à la propriété "annonces" de l'entité "Users" qui correspond à la relation entre nos entités.
Pour accéder à cette propriété depuis Twig, nous utiliserons "app.user.annonces" et ferons une boucle.
{% for annonce in app.user.annonces %}
<p>Titre : {{ annonce.title }}</p>
{% endfor %}
Il conviendra bien sûr d'apporter des mises en forme en CSS pour rendre le tout présentable.
Des détails complémentaires sont présents dans la vidéo.
Obtenir de l'aide
Pour obtenir de l'aide, vous pouvez accéder au serveur Discord pour une entraide par chat