Découverte de la notion de Groupes de Validation (ValidationGroups)

Aperçu indisponible

Vous devez vous connecter ou vous inscrire pour voir cette leçon.

Se connecterS'inscrire

Symfony 4 : les fondamentaux par la pratique

Acheter maintenantEn savoir plus

Introduction

  • Qu'est-ce que Symfony 4 et pourquoi l'utiliser ?7
  • Ce qu'on va faire ensemble, ce que ça va vous apporter3
  • Les outils nécessaires pour suivre la formation1
  • Mettre en place l'environnement de travail5
  • Mettre en place VSCode pour travailler !11
  • A l'attention des étudiants qui utilisent AdBlock et autres extensions3
  • Tirez profit au maximum de cette formation !3

Premiers pas : mise en place de notre application Symfony 4

  • Avant de commencer : sortie de Symfony 5
  • Créons notre projet Symfony 4 avec Composer !43
  • Découverte de la structure d'une application Symfony 45
  • Introduction : le concept de Controller au sein d'une application Symfony 4
  • Créons notre premier Controller : le HomeController27
  • Séparer les traitements et l'affichage grâce à Twig6
  • Les avantages du langage de templating Twig1
  • Comprendre Twig : L'interpolation (afficher une variable)
  • Comprendre Twig : les structures de contrôle (conditions et boucles)1
  • Comprendre Twig : les commentaires
  • Comprendre Twig : les filtres
  • Routes paramétrées & routes multiples : des adresses dynamique porteuses de sens9
  • Comprendre Twig : générer une URL avec la fonction path()2
  • Comprendre Twig : l'héritage de gabarit (extends)7
  • Mise en place d'un thème Bootstrap10
  • Mise en place de la barre de navigation
  • Mise en place finale de la page d'accueil de notre application9
  • Versionning de notre avancement avec GIT7
  • Quiz : Démarrage avec Symfony 4

Relations avec la base de données

  • Introduction : la relation aux bases de données avec Symfony et Doctrine1
  • Création de la base de données grâce à la CLI11
  • Comprendre Doctrine : créons notre première Entité pour représenter les annonces3
  • Comprendre Doctrine : notre premier script de migrations2
  • Comprendre Doctrine : créer des jeux de fausses données avec les Fixtures10
  • Rendre nos fausses données plus réalistes avec Faker18
  • Créer des slugs facilement avec Slugify1
  • Comprendre Doctrine : interagir avec le cycle de vie des Entités10
  • Comprendre Doctrine : les relations entre Entités avec l'Entité Image
  • Enrichir la Fixture pour créer des images11

Notre premier Controller : le AdController pour la gestion des annonces

  • Affichage de la liste des annonces9
  • Récupération des annonces grâce au Repository Doctrine23
  • Comprendre l'Injection de Dépendances2
  • Récupération d'une annonce avec son slug grâce au Repository10
  • Affichage d'une annonce16
  • Un peu de CSS personnalisé9
  • Parcourir les images liées à une annonce grâce à la relation entre les 2 entités24
  • Mise à jour de la barre de navigation5
  • Liens paramétrés dans la liste des annonces3
  • Comprendre Twig : utiliser une variable Twig pour factoriser un code2
  • Comprendre le ParamConverter de Symfony 49

Symfony et les formulaires

  • Créer la page de création d'une annonce1
  • Découverte du FormBuilder : le fabricant de formulaire3
  • Comprendre Twig : afficher un formulaire Symfony
  • Créer une classe de Formulaire externe et réutilisable
  • Comprendre Twig : les fonctions d'affichage de formulaire
  • Comprendre Twig : mise en forme du formulaire
  • Comprendre Twig : les thèmes de formulaires8
  • Comprendre Twig : le thème de formulaire Bootstrap 411
  • Configurer les champs de formulaire19
  • ALERTE SYMFONY 56
  • Récupérer et sauvegarder les données du formulaire13
  • Effectuer une redirection vers la page de la nouvelle annonce
  • Utiliser les messages Flash pour notifier le visiteur15
  • Comprendre Twig : les inclusions de template

Aller plus loin avec les formulaires

  • Créer des sous-formulaire avec les CollectionType16
  • Comprendre Twig : personnaliser l'affichage des sous-formulaires32
  • Ajouter un élément dynamiquement grâce au prototype du CollectionType54
  • Supprimer un élément dynamiquement grâce au CollectionType8
  • Faire persister les éléments liés avec le CollectionType10
  • Correction d'un bug sur les index des sous-formulaires3
  • Rendre le champ "slug" non obligatoire (option required)5
  • La validation de formulaire avec Symfony14
  • Valider l'unicité d'une entité et éviter les doublons !2
  • Créer un formulaire d'édition pour nos annonces20
  • Valider les sous-formulaires du CollectionType13
  • Correction d'un bug lors de la suppression d'éléments du CollectionType5
  • Refactorisation du code entre les formulaire de création et d'édition3
  • Versionning de notre avancement avec GIT3

Les utilisateurs et l'authentification dans Symfony

  • Création d'une entité User pour stocker nos utilisateurs4
  • La relation OneToMany entre les annonces (Ad) et les utilisateurs (User)8
  • Mise à jour de la Fixture pour créer de faux utilisateurs6
  • Des avatars aléatoires pour nos faux utilisateurs avec RandomUser.me2
  • L'encodage des mots de passe de nos utilisateurs3
  • Découverte de l'interface UserInterface1
  • Authentification : déclare un nouveau provider (entité User)
  • Authentification : créer le formulaire de connexion2
  • Authentification : authentifier réellement l'utilisateur3
  • Authentification : permettre à l'utilisateur de se déconnecter
  • Authentification : repérer les erreurs avec la classe AuthenticationUtils6
  • Créer le formulaire d'inscription : le RegistrationType6
  • Refactorisation du code entre les classes AdType et RegistrationType4
  • Enregistrer les données du formulaire d'inscription2
  • Valider le formulaire d'inscription10
  • Créer une confirmation de mot de passe durant l'inscription5
  • Mise à jour de la barre de navigation
  • Créer un formulaire d'édition du profil utilisateur8
  • Créer un formulaire de modification du mot de passe5
  • Sauvegarder le nouveau mot de passe17
  • Créer une erreur personnalisée sur le formulaire de modification de mot de passe9

Intégration des utilisateurs dans le reste du site

  • Afficher l'auteur dans la page d'une annonce
  • Créer une page de profil pour les utilisateurs1
  • Faire les liens vers la page de profil d'un utilisateur
  • Créer la page "Mon compte"
  • Ajouter des liens de gestion du compte utilisateur2
  • Mise en place d'une dropdown dans la barre de navigation4
  • Prendre en compte l'utilisateur connecté lorsqu'on créé une annonce5
  • Versionning de notre avancement avec GIT

La sécurité et les autorisations dans Symfony 4

  • Mise en place des rôles d'utilisateurs2
  • Modification de la Fixture pour créer un rôle ADMIN et un administrateur1
  • Récupération des rôles dans l'entité User9
  • Sécuriser le AdController avec les annotation @IsGranted() et @Security()3
  • Sécuriser le AccountController avec les annotations @IsGranted() et @Security()
  • Afficher des liens et bouton en fonction du statut de l'utilisateur
  • Permettre aux utilisateurs de supprimer leurs annonces5
  • Versionning de notre avancement avec GIT2
  • Conclusion et ouvertures

Gérer les pages d'erreurs dans Symfony 4

  • Comprendre la gestion des pages d'erreurs dans une application Symfony 4
  • Créer une page d'erreur 404 personnalisée et la tester12
  • Créer une page d'erreur 403 personnalisée et la tester
  • Faire attention au cache en environnement de production

Gestion des réservations

  • Création d'une entité Booking et migration de la base de données
  • Modification de la Fixture pour ajouter de fausses réservations15
  • Création du formulaire de réservation
  • Modifier l'apparence du champ DateType avec l'option "widget"2
  • Ajout d'un champ de commentaire sur les réservations3
  • Création du lien de réservation à partir d'une annonce
  • Sécuriser la page de réservation avec l'annotation @IsGranted()
  • Enregistrer une réservation en calculant automatiquement le montant2
  • Affichage d'une réservation existante9
  • Utiliser un paramètre GET pour modifier l'affichage d'une réservation2
  • Validation du formulaire de réservation (partie 1)9
  • Prendre en compte la disponibilité d'une annonce lors de la réservation12
  • Utiliser un calendrier Javascript pour empêcher le choix de dates indisponibles18
  • Utiliser un DataTransformer pour gérer les dates au format français13
  • Validation des dates du formulaire (partie 2)
  • Calculer le nombre de nuits et le montant de la réservation en Javascript11
  • Création d'une page de liste des réservations
  • Versionning de notre avancement avec GIT

Gestion des commentaires et notations

  • Création d'une entité Comment pour stocker les avis des visiteurs
  • Modification de la Fixture pour ajouter de faux commentaires
  • Affichage des commentaires sur la page d'une annonce
  • Installation de FontAwesome pour bénéficier d'icônes !
  • Afficher les notes sous forme d'étoiles4
  • Factorisation du template d'affichage des notes sous forme d'icônes
  • Calculer et afficher la note moyenne d'une annonce1
  • Affichage des moyennes sur l'ensemble des annonces4
  • Personnaliser le CSS afin d'avoir des étoiles dorées pour les notes
  • Affichage du formulaire de commentaire sur une réservation
  • Enregistrer les données du formulaire de commentaire5
  • S'assurer qu'un visiteur ne commente qu'une seule fois une annonce6
  • Affichage des notes sur la liste des réservations1

[Optionnel] Refonte visuelle et uniformisation

  • Partie 1 : modifications CSS pour des changements globaux
  • Partie 2 : Uniformisation des espacements et du format des prix
  • Partie 3 : Refonte du formulaire de création d'une annonce1
  • Partie 4 : Refonte du formulaire d'édition du profil
  • Partie 5 : Refonte du formulaire d'inscription
  • Partie 6 : Refonte du formulaire de modification du mot de passe
  • Partie 7 : Mise en place du Responsive avec la balise méta viewport !

Créer une interface d'administration pour notre application

  • Création du controller d'Administration des Annonces : le AdminAdController10
  • Mise en place d'un habillage différent au sein de l'administration
  • Mise à jour de la barre de navigation
  • Sécurité : Protéger l'accès à toute l'administration grâce aux ACL3
  • Créer une page de connexion spécifique pour l'administration
  • Création d'un Firewall particulier pour l'administration4
  • Créer le formulaire de connexion à l'administration13
  • Permettre à l'administrateur de se déconnecter2
  • Création du formulaire d'édition des annonces7
  • Mettre en place un thème de CollectionType à nouveau22
  • Permettre à l'administrateur de supprimer une annonce
  • Exercice : affichez la liste des commentaires !
  • Solution : affichez la liste des commentaires !
  • Exercice : créez le formulaire d'édition d'un commentaire
  • Solution : créez le formulaire d'édition d'un commentaire
  • Exercice : permettez à l'administrateur de supprimer un commentaire
  • Solution : permettez à l'administrateur de supprimer un commentaire
  • Exercice : affichez la liste des réservations
  • Solution : affichez la liste des réservations1
  • Découverte du type de champ EntityType pour l'édition d'une réservation
  • Le problème de la validation par l'entité Booking dans 2 formulaires différents1
  • Découverte de la notion de Groupes de Validation (ValidationGroups)9
  • Recalculer le montant d'une réservation lors de la modification de l'annonce
  • Permettre à l'administrateur de supprimer une réservation
  • Versionning de notre avancement avec GIT

Découverte du concept de Service : mise en pratique avec la Pagination

  • Introduction aux méthodes des Repositories pour récupérer les données
  • Mise en place HTML et utilisation du findBy() pour paginer !
  • Placer des contraintes sur les paramètres des routes grâce aux Requirements4
  • Rendre dynamique la pagination HTML1
  • Découverte de la notion de Service pour la pagination
  • Création du service de pagination
  • Factorisation du Twig concernant la pagination
  • Intégrer l'affichage de la pagination dans le service de pagination3
  • Rendre configurable le service de pagination grâce au fichier "services.yaml"
  • Aider les futurs développeurs avec les exceptions
  • Conclusion : la notion de services et ses avantages
  • Versionning de notre avancement avec GIT

Découverte du DQL et création du Dashboard : Les requêtes avec Doctrine

  • Mise en place statique du Dashboard dans l'administration4
  • Nos premières requêtes DQL6
  • Les fonctions d'agrégation et le tri5
  • Extraire la récupération des données du Controller grâce à la notion de Service
  • Découverte du QueryBuilder pour remplir la homepage du site8

Découverte de Webpack Encore : prendre soin de ses fichiers CSS et JS !

  • Installation de Webpack Encore dans notre projet4
  • Mise en place de la bonne structure des fichiers1
  • Fusionner des fichiers CSS en un seul fichier optimisé11
  • Le versionning des fichiers CSS et JS afin de contourner les problèmes de cache1
  • Utiliser SASS dans nos fichiers CSS grâce à Webpack Encore3
  • Traiter nos fichiers Javascript avec Webpack Encore17
  • Installation du package Bootstrap avec NPM1
  • Pouvoir utiliser jQuery partout : le problème des modules Webpack13
  • Créer plusieurs fichiers Javascript pour optimiser les chargements2
  • Mise à jour de l'interface d'administration
  • Conclusion : non nécessaire mais tellement avantageux !
  • Versionning de notre avancement avec GIT

Déploiement de l'application en production

  • Création d'un dépôt Git sur la plateforme GitHub et premier "push" de code
  • Découverte du fichier .gitignore et des fichiers ignorés2
  • Hébergement Mutualisé : introduction3
  • Générer le fichier .htaccess avec le pack symfony/apache-pack8
  • Hébergement Mutualisé : mise en ligne avec accès SSH6
  • Hébergement Mutualisé : mise en ligne sans SSH
  • Hébergement Mutualisé : faire des mises à jour sans SSH
  • Hébergement Mutualisé : faire des mises à jour avec SSH
  • Heroku : mise en place de l'application et lien avec GitHub4
  • Heroku : mise en place de la base de données et mises à jour50

SECTION BONUS : Vidéos à venir sur différents sujets

  • ⚡ AJAX & SYMFONY : INITIATION13
  • 🚀 SYMFONY/TWIG : CRÉER SES PROPRES FILTRES !1
  • 🎶 SYMFONY : L'AUTOWIRING ET LE CONTAINER DE SERVICES