Découverte de la notion de Service pour la pagination

Votre application est pleine d'objets qui servent dans différents Controllers ou autres, et il vaut donc mieux factoriser ces objets afin de pouvoir s'en servir plusieurs fois là où on le souhaite ! C'est à ça que servent les Services. Et Symfony vous rend la vie particulièrement simple lorsqu'il s'agit d'utiliser vos Services.


Ici, je vous montre par l'absurde à quel point il est non pertinent de dupliquer du code logique dans plusieurs controllers  / plusieurs vues.

▶ Documentation officielle sur le Service Container de Symfony

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