🎙 Formations
💌 Newsletter
👨💻 Qui suis-je ?
Se connecter
🎙 Formations
💌 Newsletter
👨💻 Qui suis-je ?
Se connecter
Symfony 5 par la pratique
Acheter maintenant
En savoir plus
A propos de cette formation (15 minutes)
Présentation de la formation
Ce que l'on va faire ensemble 😊
Mise en place de VSCode
Les outils nécessaires (PHP 7.2, Composer, Git ...)
Rendre PHP disponible dans la CMD de Windows
La CLI (ligne de commande) Symfony
Tirer profit au mieux de cette formation
Jouer les vidéos automatiquement (autoplay)
Rafraichissement : le PHP de nos jours (30 minutes)
Le serveur interne de PHP
L'autoloading (chargement automatique des classes)
Composer et l'autoloading
📖 Composer et les bibliothèques tierces
Installer des bibliothèques tierces avec Composer
📖 PHP moderne : Récapitulatif
Rafraichissement : le PHP de nos jours (30 minutes): Quiz
📖 Les commandes du développement moderne avec PHP
Présentation du framework Symfony (20 minutes)
📖 Qu'est-ce qu'un Framework au fait ?
📖 Présentation du projet Symfony
📖 L'architecture MVC dans le web, et avec Symfony 5
📖 Une spécificité de Symfony : La modularité
Créons notre application Symfony 5.1 !
Lancer le serveur avec la commande `symfony serve`
📖 Les commandes à connaître quand on débute avec la CLI de Symfony
Les bases de Symfony : HttpFoundation et Routing (45 minutes)
Premières pages : les Routes et les Controllers
HttpFoundation : Requête et Réponse HTTP !
Routes paramétrables : valeurs par défaut et contraintes
Contraintes de Routes
Configuration des Routes et fichiers YAML
Configurer les routes sous forme d'Annotations (@Route)
Symfony Flex : booster Composer et le rendre Surpuissant !
Routes, Controllers, HttpFoundation : Récapitulatif
Exercice : créez une page Hello World
Correction : créez une page Hello World
Les bases de Symfony : HttpFoundation et Routing (45 minutes): Quiz
📖 Fiche de révision : Routing, Controller et HttpFoundation
Les bases de Symfony : Le container de services (50 minutes)
Introduction au container de services de Symfony
Créez vos propres services !
📖 Comprendre le Container de Services de Symfony
Voir le Container de Services à l'oeuvre !
Les limites du Container : configuration des services
Utilisez des bibliothèques tierces avec le Container
📖 La différence entre une bibliothèque et un Bundle Symfony
📖 Container de Services : Récapitulatif
📖 Interlude : l'ArgumentResolver dans Symfony
Exercice #01 : Créez un service "Detector"
Correction #01 : Créez un service "Detector"
Exercice #02 : Configuration d'un seuil de TVA
Correction #02 : Configuration d'un seuil de TVA
Les bases de Symfony : Le container de services (50 minutes): Quiz
A la découverte de Twig ! (65 minutes)
📖 Introduction à Twig !
Notre premier template Twig
Twig : Les tags et les filtres
Exercice #01 : Boucle for et if
Correction #01 : Boucle for et if
Twig : Exploiter des tableaux associatifs ou des objets
Twig : Héritage de templates et système de blocks
Twig : Inclusions de templates
👌 Bonnes pratiques : créons une fonction render()
Découverte de la classe AbstractController
Twig : créons ensemble la page d'accueil du site
Twig : créons une barre de navigation
Twig : Récapitulatif
A la découverte de Twig ! (65 minutes): Quiz
Doctrine et les bases de données (1 heure 35 minutes)
📖 Introduction à Doctrine
Doctrine : Installation du Bundle (donc des services 😉)
📖 Introduction au système de Migrations
Création de la base de données
Créer une entité Product et la migration qui va avec
Découverte d'un Repository Doctrine
Manipuler des enregistrements avec le Manager de Doctrine
Exercice #01 : Créez une entité Category
Correction #01 : Créez une entité Category
Travailler et naviguer dans les migrations
📖 Doctrine : Premier récapitulatif
Créer des jeux de fausses données avec les Fixtures
Attention : mise à jour concernant Faker
Utiliser Faker pour plus de réalisme dans nos données
Enrichir Faker pour plus de réalisme encore
Créer de véritables Slugs avec le composant String
📖 Doctrine : Deuxième récapitulatif
Créer une association entre Product et Category
Ajouter un champ dans l'entité Product
Utiliser nos entités dans un template Twig
📖 Doctrine : Dernier récapitulatif
Doctrine et les bases de données (1 heure 35 minutes): Quiz
Symfony 5 et le Debug Pack (9 minutes)
Débugger dans Symfony avec le Debug Pack !
Twig : aller plus loin (35 minutes)
Créer la page d'une Category avec ses Products
Créer la page d'un Product
Ajouter un fil d'Ariane (Breadcrumb) sur nos pages
Routes "statiques" : le problème des URLs écrites en dur
👌 Génération des URLs avec l'UrlGenerator et la fonction path()
📖 Récapitulatif
Twig : aller plus loin (35 minutes): Quiz
Les formulaires dans Symfony 5 (1 heure 50 minutes)
📖 Introduction aux formulaires avec Symfony
Installer le composant symfony/form
Créer la page qui accueillera le formulaire de création d'un produit
Configurer un formulaire avec le FormBuilder
Configurer les champs du formulaire
Remplir un ChoiceType avec les données de la base
Utiliser les champs EntityType pour afficher les données de la base
Twig : Les fonctions de rendu pour les formulaires
Twig : Découverte des thèmes de formulaires
Twig : Les thèmes de formulaires livrés avec Symfony
📖 Formulaires : Premier récapitulatif
Soumission du formulaire et récupération des données
Récupérer les données sous la forme d'un objet précis (data_class)
Faire persister une entité issue d'un formulaire
👌 Créer une classe de formulaire
Form : les raccourcis offerts par l'AbstractController
Créer un formulaire de modification
Créer une Redirection après la soumission d'un formulaire
📖 Formulaires : Deuxième récapitulatif
Exercice #01 : Créez un CategoryController avec deux Routes
Correction #01 : Créez un CategoryController avec deux Routes
Exercice #02 : Créez le formulaire de création d'une catégorie
Correction #02 : Créez le formulaire de création d'une catégorie
Exercice #03 : Créez le formulaire de modification d'une catégorie
Correction #03 : Créez le formulaire de modification d'une catégorie
Les formulaires dans Symfony 5 (1 heure 50 minutes): Quiz
Aller plus loin avec le composant Form de Symfony (45 minutes)
📖 Le cycle de vie d'un Formulaire
Réagir aux événements lancés par le formulaire
Transformer les données d'un formulaire grâce aux événements
Transformer des données avec un DataTransformer
DataTransformer : factoriser le code dans une classe !
Créer ses propres types de champs !
📖 Récapitulatif
Versionning avec Git
Aller plus loin avec le composant Form de Symfony (45 minutes): Quiz
Validation des données (1 heure et 5 minutes)
Introduction à la validation des données avec Symfony
📖 Notions de base sur le composant Validator
Validation de données simples (scalaires)
Validation de données complexes (tableaux)
Validation d'objets grâce à YAML
Validation d'objets en PHP
Utiliser l'espace de noms Constraints (Assert)
Validation d'objets grâce aux annotations
Validation d'un formulaire
Les groupes de validation
Finitions et versionning avec Git
Exercice : validez les catégories !
Corrigé : validez les catégories !
📖 Récapitulatif
Validation des données (1 heure et 5 minutes): Quiz
Renforcement Twig : Mise en place de la navbar (16 minutes)
Mise en place de la navbar : Introduction
Twig : appeler un controller directement depuis un template
Twig : Injecter une variable globale dans nos templates
Mettre en place les liens utilisateurs dans la navbar
La sécurité : authentification (1 heure et 40 minutes)
📖 Introduction à la sécurité dans Symfony
📖 Firewalls : des régions politiques dans nos applications
Installation du composant Security
L'entité User pour représenter nos utilisateurs
Mise à jour des fixtures
Hasher les mots de passes pour plus de sécurité
📖 Introduction aux Authenticator de Symfony
La commande make:auth
Page de login et problèmes de routage
Jouer avec les priorités des routes
Formulaire de connexion (login)
Authenticator : la méthode supports()
Authenticator : compléter la procédure d'authentification
Les échecs possibles pendant l'authentification
Gérer les échecs / succès de l'authentification
Obtenir la raison de l'échec de l'authentification (AuthenticationUtils)
Modifier les messages d'erreur
📖 Premier récapitulatif
L'Authenticator "form_login" livré par Symfony
Gérer la déconnexion avec l'option "logout"
Mise en forme de la barre de navigation
📖 Deuxième récapitulatif
Interlude : les commandes essentielles (config:dump et debug:config)
La sécurité : autorisations et rôles (50 minutes)
📖 Introduction aux autorisations dans Symfony 5
La méthode "start()" de l'authenticator et les ACL
Découverte du service Security
Les raccourcis de l'AbstractController pour la sécurité
Contrôler les accès grâce à l'annotation @IsGranted
Contrôler l'accès à un objet en particulier
Encapsuler la logique d'accès dans un Voter
📖 Vraiment comprendre les Voters
Remise en place avant de passer à la suite
📖 Récapitulatif sur la sécurité dans Symfony 5
Versionning avec Git
La session dans Symfony 5 (1 heure et 30 minutes)
Mise en place du panier et découverte de la session
Sécuriser la procédure d'ajout d'un produit au panier
Se faire "livrer" la session grâce à la SessionInterface
Découverte des "bags" et du FlashBag
Afficher les message Flash dans Twig
Les raccourcis de l'AbstractController
Refactoring Twig et inclusion de templates
Afficher l'état du panier dans une page
📖 Premier récapitulatif
Refactoring : Créer un CartService qui embarque toute la gestion du panier
Refactoring : créer une classe qui représente un élément du panier
Rendre le CartService disponible dans nos templates Twig
Finalisations : incrémenter, décrémenter, supprimer les éléments du panier
Refactoring du CartService
Versionning avec Git
📖 Conclusion
Commandes : Doctrine et ManyToMany (1 heure et 45 minutes)
📖 Introduction
Créer l'entité Purchase (commande)
Afficher la liste des commandes d'un utilisateur
Ajouter une date de commande et gérer les problèmes de migration
Refactoring de la liste de commandes
Relation ManyToMany entre Purchase et Product
Créer une ManyToMany avec des informations supplémentaires
📖 Premier récapitulatif
Formulaire de commande
Le Controller qui va gérer le formulaire (1/2)
Le Controller qui va gérer le formulaire (2/2)
Refactoring du Controller
Finaliser le processus de commande
Versionning avec Git
📖 Conclusion
Refactoring : créer une classe pour persister la Purchase
Architecture et paiement Stripe ! (55 minutes)
📖 Introduction
Mise en place de la page de paiement
Créer une intention de paiement avec Stripe
Formulaire de carte bleue avec Stripe Elements
Finaliser le paiement après confirmation de Stripe
Refactoring : créer un StripeService
Définition du StripeService dans le fichier services.yaml
Refactoring du Javascript
Stocker les clés Stripes dans des variables d'environnement (.env)
Etudiez les Webhooks de Stripe !
Versionning avec Git
📖 Conclusion
Symfony et les événements (1 heure et 15 minutes)
Introduction aux événements dans Symfony
Prérequis : passages par valeur / référence
Le design pattern Mediator
Voir les événements et les réactions dans le profiler
Plongée dans le coeur de Symfony : le Kernel et les événements
Création de notre premier Listener
Découverte et création de notre premier Subscriber
Premier récapitulatif
Créons et propageons notre propre événement : le PurchaseEvent
Création d'un Subscriber qui enverra des emails
Rappels sur les principes SOLID
Versionning avec Git
Conclusion
Exercice : créer un événement ProductViewEvent et y réagir
Corrigé : créer un événement ProductViewEvent et y réagir
Doctrine et les événements (30 minutes)
Introduction au cycle de vie des entités
Automatismes dans les entités avec les Lifecycle Callbacks
Automatismes grâce aux Doctrine Listeners
Automatismes grâce au Entity Listeners
Conclusion et aide à la décision
Exercice : créer un automatisme avec Doctrine
Correction : créer un automatisme avec Doctrine
Versionning avec Git
Les emails avec le composant Mailer (35 minutes)
Symfony Mailer : introduction
Tester l'envoi des emails avec Mailtrap.io
Installation du composant Mailer
Envoyer notre premier email !
Créer des emails en HTML via Twig et le TemplatedEmail
Envoyer un email de confirmation lors d'une commande
Conclusion
Versionning avec Git
Etendre Twig avec de nouveaux filtres (15 minutes)
Enrichir Twig : Introduction
Créons le filtre "amount" pour afficher des prix
Rendre le filtre amount plus intelligent grâce aux paramètres
Enrichir Twig : conclusion
Versionning avec Git
Déployer Symfony 5 chez Heroku (47 minutes)
Déploiement : introduction
Héberger le code sur GitHub
Créer une application chez Heroku
Configurer Apache grâce au .htaccess et à la recette apache-pack
Créer une instance de MySQL attachée à l'app Heroku
Mettre en place les variables d'environnement chez Heroku
Configurer Monolog pour voir les logs de l'application en prod
Configurer les scripts pour les migrations et les fixtures
Conclusion
Conclusion de la formation (9 minutes)
Ouvertures et futurs apprentissages
Conclusion : bravo et merci 💕
Bonus : comprendre le ParamConverter de Symfony (en cours de tournage)
Tournage en cours
Bonus : faire de l'upload de fichier dans un formulaire (en cours de tournage)
Tournage en cours
Programmes
Cours
Symfony 5 par la pratique
Symfony 5 par la pratique
Symfony 5 par la pratique
Acheter maintenant
En savoir plus
A propos de cette formation (15 minutes)
Présentation de la formation
Ce que l'on va faire ensemble 😊
Mise en place de VSCode
Les outils nécessaires (PHP 7.2, Composer, Git ...)
Rendre PHP disponible dans la CMD de Windows
La CLI (ligne de commande) Symfony
Tirer profit au mieux de cette formation
Jouer les vidéos automatiquement (autoplay)
Rafraichissement : le PHP de nos jours (30 minutes)
Le serveur interne de PHP
L'autoloading (chargement automatique des classes)
Composer et l'autoloading
📖 Composer et les bibliothèques tierces
Installer des bibliothèques tierces avec Composer
📖 PHP moderne : Récapitulatif
Rafraichissement : le PHP de nos jours (30 minutes): Quiz
📖 Les commandes du développement moderne avec PHP
Présentation du framework Symfony (20 minutes)
📖 Qu'est-ce qu'un Framework au fait ?
📖 Présentation du projet Symfony
📖 L'architecture MVC dans le web, et avec Symfony 5
📖 Une spécificité de Symfony : La modularité
Créons notre application Symfony 5.1 !
Lancer le serveur avec la commande `symfony serve`
📖 Les commandes à connaître quand on débute avec la CLI de Symfony
Les bases de Symfony : HttpFoundation et Routing (45 minutes)
Premières pages : les Routes et les Controllers
HttpFoundation : Requête et Réponse HTTP !
Routes paramétrables : valeurs par défaut et contraintes
Contraintes de Routes
Configuration des Routes et fichiers YAML
Configurer les routes sous forme d'Annotations (@Route)
Symfony Flex : booster Composer et le rendre Surpuissant !
Routes, Controllers, HttpFoundation : Récapitulatif
Exercice : créez une page Hello World
Correction : créez une page Hello World
Les bases de Symfony : HttpFoundation et Routing (45 minutes): Quiz
📖 Fiche de révision : Routing, Controller et HttpFoundation
Les bases de Symfony : Le container de services (50 minutes)
Introduction au container de services de Symfony
Créez vos propres services !
📖 Comprendre le Container de Services de Symfony
Voir le Container de Services à l'oeuvre !
Les limites du Container : configuration des services
Utilisez des bibliothèques tierces avec le Container
📖 La différence entre une bibliothèque et un Bundle Symfony
📖 Container de Services : Récapitulatif
📖 Interlude : l'ArgumentResolver dans Symfony
Exercice #01 : Créez un service "Detector"
Correction #01 : Créez un service "Detector"
Exercice #02 : Configuration d'un seuil de TVA
Correction #02 : Configuration d'un seuil de TVA
Les bases de Symfony : Le container de services (50 minutes): Quiz
A la découverte de Twig ! (65 minutes)
📖 Introduction à Twig !
Notre premier template Twig
Twig : Les tags et les filtres
Exercice #01 : Boucle for et if
Correction #01 : Boucle for et if
Twig : Exploiter des tableaux associatifs ou des objets
Twig : Héritage de templates et système de blocks
Twig : Inclusions de templates
👌 Bonnes pratiques : créons une fonction render()
Découverte de la classe AbstractController
Twig : créons ensemble la page d'accueil du site
Twig : créons une barre de navigation
Twig : Récapitulatif
A la découverte de Twig ! (65 minutes): Quiz
Doctrine et les bases de données (1 heure 35 minutes)
📖 Introduction à Doctrine
Doctrine : Installation du Bundle (donc des services 😉)
📖 Introduction au système de Migrations
Création de la base de données
Créer une entité Product et la migration qui va avec
Découverte d'un Repository Doctrine
Manipuler des enregistrements avec le Manager de Doctrine
Exercice #01 : Créez une entité Category
Correction #01 : Créez une entité Category
Travailler et naviguer dans les migrations
📖 Doctrine : Premier récapitulatif
Créer des jeux de fausses données avec les Fixtures
Attention : mise à jour concernant Faker
Utiliser Faker pour plus de réalisme dans nos données
Enrichir Faker pour plus de réalisme encore
Créer de véritables Slugs avec le composant String
📖 Doctrine : Deuxième récapitulatif
Créer une association entre Product et Category
Ajouter un champ dans l'entité Product
Utiliser nos entités dans un template Twig
📖 Doctrine : Dernier récapitulatif
Doctrine et les bases de données (1 heure 35 minutes): Quiz
Symfony 5 et le Debug Pack (9 minutes)
Débugger dans Symfony avec le Debug Pack !
Twig : aller plus loin (35 minutes)
Créer la page d'une Category avec ses Products
Créer la page d'un Product
Ajouter un fil d'Ariane (Breadcrumb) sur nos pages
Routes "statiques" : le problème des URLs écrites en dur
👌 Génération des URLs avec l'UrlGenerator et la fonction path()
📖 Récapitulatif
Twig : aller plus loin (35 minutes): Quiz
Les formulaires dans Symfony 5 (1 heure 50 minutes)
📖 Introduction aux formulaires avec Symfony
Installer le composant symfony/form
Créer la page qui accueillera le formulaire de création d'un produit
Configurer un formulaire avec le FormBuilder
Configurer les champs du formulaire
Remplir un ChoiceType avec les données de la base
Utiliser les champs EntityType pour afficher les données de la base
Twig : Les fonctions de rendu pour les formulaires
Twig : Découverte des thèmes de formulaires
Twig : Les thèmes de formulaires livrés avec Symfony
📖 Formulaires : Premier récapitulatif
Soumission du formulaire et récupération des données
Récupérer les données sous la forme d'un objet précis (data_class)
Faire persister une entité issue d'un formulaire
👌 Créer une classe de formulaire
Form : les raccourcis offerts par l'AbstractController
Créer un formulaire de modification
Créer une Redirection après la soumission d'un formulaire
📖 Formulaires : Deuxième récapitulatif
Exercice #01 : Créez un CategoryController avec deux Routes
Correction #01 : Créez un CategoryController avec deux Routes
Exercice #02 : Créez le formulaire de création d'une catégorie
Correction #02 : Créez le formulaire de création d'une catégorie
Exercice #03 : Créez le formulaire de modification d'une catégorie
Correction #03 : Créez le formulaire de modification d'une catégorie
Les formulaires dans Symfony 5 (1 heure 50 minutes): Quiz
Aller plus loin avec le composant Form de Symfony (45 minutes)
📖 Le cycle de vie d'un Formulaire
Réagir aux événements lancés par le formulaire
Transformer les données d'un formulaire grâce aux événements
Transformer des données avec un DataTransformer
DataTransformer : factoriser le code dans une classe !
Créer ses propres types de champs !
📖 Récapitulatif
Versionning avec Git
Aller plus loin avec le composant Form de Symfony (45 minutes): Quiz
Validation des données (1 heure et 5 minutes)
Introduction à la validation des données avec Symfony
📖 Notions de base sur le composant Validator
Validation de données simples (scalaires)
Validation de données complexes (tableaux)
Validation d'objets grâce à YAML
Validation d'objets en PHP
Utiliser l'espace de noms Constraints (Assert)
Validation d'objets grâce aux annotations
Validation d'un formulaire
Les groupes de validation
Finitions et versionning avec Git
Exercice : validez les catégories !
Corrigé : validez les catégories !
📖 Récapitulatif
Validation des données (1 heure et 5 minutes): Quiz
Renforcement Twig : Mise en place de la navbar (16 minutes)
Mise en place de la navbar : Introduction
Twig : appeler un controller directement depuis un template
Twig : Injecter une variable globale dans nos templates
Mettre en place les liens utilisateurs dans la navbar
La sécurité : authentification (1 heure et 40 minutes)
📖 Introduction à la sécurité dans Symfony
📖 Firewalls : des régions politiques dans nos applications
Installation du composant Security
L'entité User pour représenter nos utilisateurs
Mise à jour des fixtures
Hasher les mots de passes pour plus de sécurité
📖 Introduction aux Authenticator de Symfony
La commande make:auth
Page de login et problèmes de routage
Jouer avec les priorités des routes
Formulaire de connexion (login)
Authenticator : la méthode supports()
Authenticator : compléter la procédure d'authentification
Les échecs possibles pendant l'authentification
Gérer les échecs / succès de l'authentification
Obtenir la raison de l'échec de l'authentification (AuthenticationUtils)
Modifier les messages d'erreur
📖 Premier récapitulatif
L'Authenticator "form_login" livré par Symfony
Gérer la déconnexion avec l'option "logout"
Mise en forme de la barre de navigation
📖 Deuxième récapitulatif
Interlude : les commandes essentielles (config:dump et debug:config)
La sécurité : autorisations et rôles (50 minutes)
📖 Introduction aux autorisations dans Symfony 5
La méthode "start()" de l'authenticator et les ACL
Découverte du service Security
Les raccourcis de l'AbstractController pour la sécurité
Contrôler les accès grâce à l'annotation @IsGranted
Contrôler l'accès à un objet en particulier
Encapsuler la logique d'accès dans un Voter
📖 Vraiment comprendre les Voters
Remise en place avant de passer à la suite
📖 Récapitulatif sur la sécurité dans Symfony 5
Versionning avec Git
La session dans Symfony 5 (1 heure et 30 minutes)
Mise en place du panier et découverte de la session
Sécuriser la procédure d'ajout d'un produit au panier
Se faire "livrer" la session grâce à la SessionInterface
Découverte des "bags" et du FlashBag
Afficher les message Flash dans Twig
Les raccourcis de l'AbstractController
Refactoring Twig et inclusion de templates
Afficher l'état du panier dans une page
📖 Premier récapitulatif
Refactoring : Créer un CartService qui embarque toute la gestion du panier
Refactoring : créer une classe qui représente un élément du panier
Rendre le CartService disponible dans nos templates Twig
Finalisations : incrémenter, décrémenter, supprimer les éléments du panier
Refactoring du CartService
Versionning avec Git
📖 Conclusion
Commandes : Doctrine et ManyToMany (1 heure et 45 minutes)
📖 Introduction
Créer l'entité Purchase (commande)
Afficher la liste des commandes d'un utilisateur
Ajouter une date de commande et gérer les problèmes de migration
Refactoring de la liste de commandes
Relation ManyToMany entre Purchase et Product
Créer une ManyToMany avec des informations supplémentaires
📖 Premier récapitulatif
Formulaire de commande
Le Controller qui va gérer le formulaire (1/2)
Le Controller qui va gérer le formulaire (2/2)
Refactoring du Controller
Finaliser le processus de commande
Versionning avec Git
📖 Conclusion
Refactoring : créer une classe pour persister la Purchase
Architecture et paiement Stripe ! (55 minutes)
📖 Introduction
Mise en place de la page de paiement
Créer une intention de paiement avec Stripe
Formulaire de carte bleue avec Stripe Elements
Finaliser le paiement après confirmation de Stripe
Refactoring : créer un StripeService
Définition du StripeService dans le fichier services.yaml
Refactoring du Javascript
Stocker les clés Stripes dans des variables d'environnement (.env)
Etudiez les Webhooks de Stripe !
Versionning avec Git
📖 Conclusion
Symfony et les événements (1 heure et 15 minutes)
Introduction aux événements dans Symfony
Prérequis : passages par valeur / référence
Le design pattern Mediator
Voir les événements et les réactions dans le profiler
Plongée dans le coeur de Symfony : le Kernel et les événements
Création de notre premier Listener
Découverte et création de notre premier Subscriber
Premier récapitulatif
Créons et propageons notre propre événement : le PurchaseEvent
Création d'un Subscriber qui enverra des emails
Rappels sur les principes SOLID
Versionning avec Git
Conclusion
Exercice : créer un événement ProductViewEvent et y réagir
Corrigé : créer un événement ProductViewEvent et y réagir
Doctrine et les événements (30 minutes)
Introduction au cycle de vie des entités
Automatismes dans les entités avec les Lifecycle Callbacks
Automatismes grâce aux Doctrine Listeners
Automatismes grâce au Entity Listeners
Conclusion et aide à la décision
Exercice : créer un automatisme avec Doctrine
Correction : créer un automatisme avec Doctrine
Versionning avec Git
Les emails avec le composant Mailer (35 minutes)
Symfony Mailer : introduction
Tester l'envoi des emails avec Mailtrap.io
Installation du composant Mailer
Envoyer notre premier email !
Créer des emails en HTML via Twig et le TemplatedEmail
Envoyer un email de confirmation lors d'une commande
Conclusion
Versionning avec Git
Etendre Twig avec de nouveaux filtres (15 minutes)
Enrichir Twig : Introduction
Créons le filtre "amount" pour afficher des prix
Rendre le filtre amount plus intelligent grâce aux paramètres
Enrichir Twig : conclusion
Versionning avec Git
Déployer Symfony 5 chez Heroku (47 minutes)
Déploiement : introduction
Héberger le code sur GitHub
Créer une application chez Heroku
Configurer Apache grâce au .htaccess et à la recette apache-pack
Créer une instance de MySQL attachée à l'app Heroku
Mettre en place les variables d'environnement chez Heroku
Configurer Monolog pour voir les logs de l'application en prod
Configurer les scripts pour les migrations et les fixtures
Conclusion
Conclusion de la formation (9 minutes)
Ouvertures et futurs apprentissages
Conclusion : bravo et merci 💕
Bonus : comprendre le ParamConverter de Symfony (en cours de tournage)
Tournage en cours
Bonus : faire de l'upload de fichier dans un formulaire (en cours de tournage)
Tournage en cours
En savoir plus
Acheter maintenant
🔎 Plongez en profondeur dans le framework Symfony 🚀 Découvrez ses composants les plus importants en détails 💪 Consolidez votre pratique du PHP 🛒 Construisez un e-commerce de A à Z avec Symfony et Stripe !
A propos de cette formation (15 minutes)
8 Leçons
Présentation de la formation
Ce que l'on va faire ensemble 😊
Mise en place de VSCode
Les outils nécessaires (PHP 7.2, Composer, Git ...)
Rendre PHP disponible dans la CMD de Windows
La CLI (ligne de commande) Symfony
Tirer profit au mieux de cette formation
Jouer les vidéos automatiquement (autoplay)
Rafraichissement : le PHP de nos jours (30 minutes)
8 Leçons
Le serveur interne de PHP
L'autoloading (chargement automatique des classes)
Composer et l'autoloading
📖 Composer et les bibliothèques tierces
Installer des bibliothèques tierces avec Composer
📖 PHP moderne : Récapitulatif
Rafraichissement : le PHP de nos jours (30 minutes): Quiz
📖 Les commandes du développement moderne avec PHP
Présentation du framework Symfony (20 minutes)
7 Leçons
📖 Qu'est-ce qu'un Framework au fait ?
📖 Présentation du projet Symfony
📖 L'architecture MVC dans le web, et avec Symfony 5
📖 Une spécificité de Symfony : La modularité
Créons notre application Symfony 5.1 !
Lancer le serveur avec la commande `symfony serve`
📖 Les commandes à connaître quand on débute avec la CLI de Symfony
Les bases de Symfony : HttpFoundation et Routing (45 minutes)
12 Leçons
Premières pages : les Routes et les Controllers
HttpFoundation : Requête et Réponse HTTP !
Routes paramétrables : valeurs par défaut et contraintes
Contraintes de Routes
Configuration des Routes et fichiers YAML
Configurer les routes sous forme d'Annotations (@Route)
Symfony Flex : booster Composer et le rendre Surpuissant !
Routes, Controllers, HttpFoundation : Récapitulatif
Exercice : créez une page Hello World
Correction : créez une page Hello World
Les bases de Symfony : HttpFoundation et Routing (45 minutes): Quiz
📖 Fiche de révision : Routing, Controller et HttpFoundation
Les bases de Symfony : Le container de services (50 minutes)
14 Leçons
Introduction au container de services de Symfony
Créez vos propres services !
📖 Comprendre le Container de Services de Symfony
Voir le Container de Services à l'oeuvre !
Les limites du Container : configuration des services
Utilisez des bibliothèques tierces avec le Container
📖 La différence entre une bibliothèque et un Bundle Symfony
📖 Container de Services : Récapitulatif
📖 Interlude : l'ArgumentResolver dans Symfony
Exercice #01 : Créez un service "Detector"
Correction #01 : Créez un service "Detector"
Exercice #02 : Configuration d'un seuil de TVA
Correction #02 : Configuration d'un seuil de TVA
Les bases de Symfony : Le container de services (50 minutes): Quiz
A la découverte de Twig ! (65 minutes)
14 Leçons
📖 Introduction à Twig !
Notre premier template Twig
Twig : Les tags et les filtres
Exercice #01 : Boucle for et if
Correction #01 : Boucle for et if
Twig : Exploiter des tableaux associatifs ou des objets
Twig : Héritage de templates et système de blocks
Twig : Inclusions de templates
👌 Bonnes pratiques : créons une fonction render()
Découverte de la classe AbstractController
Twig : créons ensemble la page d'accueil du site
Twig : créons une barre de navigation
Twig : Récapitulatif
A la découverte de Twig ! (65 minutes): Quiz
Doctrine et les bases de données (1 heure 35 minutes)
22 Leçons
📖 Introduction à Doctrine
Doctrine : Installation du Bundle (donc des services 😉)
📖 Introduction au système de Migrations
Création de la base de données
Créer une entité Product et la migration qui va avec
Découverte d'un Repository Doctrine
Manipuler des enregistrements avec le Manager de Doctrine
Exercice #01 : Créez une entité Category
Correction #01 : Créez une entité Category
Travailler et naviguer dans les migrations
📖 Doctrine : Premier récapitulatif
Créer des jeux de fausses données avec les Fixtures
Attention : mise à jour concernant Faker
Utiliser Faker pour plus de réalisme dans nos données
Enrichir Faker pour plus de réalisme encore
Créer de véritables Slugs avec le composant String
📖 Doctrine : Deuxième récapitulatif
Créer une association entre Product et Category
Ajouter un champ dans l'entité Product
Utiliser nos entités dans un template Twig
📖 Doctrine : Dernier récapitulatif
Doctrine et les bases de données (1 heure 35 minutes): Quiz
Symfony 5 et le Debug Pack (9 minutes)
1 Leçon
Débugger dans Symfony avec le Debug Pack !
Twig : aller plus loin (35 minutes)
7 Leçons
Créer la page d'une Category avec ses Products
Créer la page d'un Product
Ajouter un fil d'Ariane (Breadcrumb) sur nos pages
Routes "statiques" : le problème des URLs écrites en dur
👌 Génération des URLs avec l'UrlGenerator et la fonction path()
📖 Récapitulatif
Twig : aller plus loin (35 minutes): Quiz
Les formulaires dans Symfony 5 (1 heure 50 minutes)
26 Leçons
📖 Introduction aux formulaires avec Symfony
Installer le composant symfony/form
Créer la page qui accueillera le formulaire de création d'un produit
Configurer un formulaire avec le FormBuilder
Configurer les champs du formulaire
Remplir un ChoiceType avec les données de la base
Utiliser les champs EntityType pour afficher les données de la base
Twig : Les fonctions de rendu pour les formulaires
Twig : Découverte des thèmes de formulaires
Twig : Les thèmes de formulaires livrés avec Symfony
📖 Formulaires : Premier récapitulatif
Soumission du formulaire et récupération des données
Récupérer les données sous la forme d'un objet précis (data_class)
Faire persister une entité issue d'un formulaire
👌 Créer une classe de formulaire
Form : les raccourcis offerts par l'AbstractController
Créer un formulaire de modification
Créer une Redirection après la soumission d'un formulaire
📖 Formulaires : Deuxième récapitulatif
Exercice #01 : Créez un CategoryController avec deux Routes
Correction #01 : Créez un CategoryController avec deux Routes
Exercice #02 : Créez le formulaire de création d'une catégorie
Correction #02 : Créez le formulaire de création d'une catégorie
Exercice #03 : Créez le formulaire de modification d'une catégorie
Correction #03 : Créez le formulaire de modification d'une catégorie
Les formulaires dans Symfony 5 (1 heure 50 minutes): Quiz
Aller plus loin avec le composant Form de Symfony (45 minutes)
9 Leçons
📖 Le cycle de vie d'un Formulaire
Réagir aux événements lancés par le formulaire
Transformer les données d'un formulaire grâce aux événements
Transformer des données avec un DataTransformer
DataTransformer : factoriser le code dans une classe !
Créer ses propres types de champs !
📖 Récapitulatif
Versionning avec Git
Aller plus loin avec le composant Form de Symfony (45 minutes): Quiz
Validation des données (1 heure et 5 minutes)
15 Leçons
Introduction à la validation des données avec Symfony
📖 Notions de base sur le composant Validator
Validation de données simples (scalaires)
Validation de données complexes (tableaux)
Validation d'objets grâce à YAML
Validation d'objets en PHP
Utiliser l'espace de noms Constraints (Assert)
Validation d'objets grâce aux annotations
Validation d'un formulaire
Les groupes de validation
Finitions et versionning avec Git
Exercice : validez les catégories !
Corrigé : validez les catégories !
📖 Récapitulatif
Validation des données (1 heure et 5 minutes): Quiz
Renforcement Twig : Mise en place de la navbar (16 minutes)
4 Leçons
Mise en place de la navbar : Introduction
Twig : appeler un controller directement depuis un template
Twig : Injecter une variable globale dans nos templates
Mettre en place les liens utilisateurs dans la navbar
La sécurité : authentification (1 heure et 40 minutes)
23 Leçons
📖 Introduction à la sécurité dans Symfony
📖 Firewalls : des régions politiques dans nos applications
Installation du composant Security
L'entité User pour représenter nos utilisateurs
Mise à jour des fixtures
Hasher les mots de passes pour plus de sécurité
📖 Introduction aux Authenticator de Symfony
La commande make:auth
Page de login et problèmes de routage
Jouer avec les priorités des routes
Formulaire de connexion (login)
Authenticator : la méthode supports()
Authenticator : compléter la procédure d'authentification
Les échecs possibles pendant l'authentification
Gérer les échecs / succès de l'authentification
Obtenir la raison de l'échec de l'authentification (AuthenticationUtils)
Modifier les messages d'erreur
📖 Premier récapitulatif
L'Authenticator "form_login" livré par Symfony
Gérer la déconnexion avec l'option "logout"
Mise en forme de la barre de navigation
📖 Deuxième récapitulatif
Interlude : les commandes essentielles (config:dump et debug:config)
La sécurité : autorisations et rôles (50 minutes)
11 Leçons
📖 Introduction aux autorisations dans Symfony 5
La méthode "start()" de l'authenticator et les ACL
Découverte du service Security
Les raccourcis de l'AbstractController pour la sécurité
Contrôler les accès grâce à l'annotation @IsGranted
Contrôler l'accès à un objet en particulier
Encapsuler la logique d'accès dans un Voter
📖 Vraiment comprendre les Voters
Remise en place avant de passer à la suite
📖 Récapitulatif sur la sécurité dans Symfony 5
Versionning avec Git
La session dans Symfony 5 (1 heure et 30 minutes)
16 Leçons
Mise en place du panier et découverte de la session
Sécuriser la procédure d'ajout d'un produit au panier
Se faire "livrer" la session grâce à la SessionInterface
Découverte des "bags" et du FlashBag
Afficher les message Flash dans Twig
Les raccourcis de l'AbstractController
Refactoring Twig et inclusion de templates
Afficher l'état du panier dans une page
📖 Premier récapitulatif
Refactoring : Créer un CartService qui embarque toute la gestion du panier
Refactoring : créer une classe qui représente un élément du panier
Rendre le CartService disponible dans nos templates Twig
Finalisations : incrémenter, décrémenter, supprimer les éléments du panier
Refactoring du CartService
Versionning avec Git
📖 Conclusion
Commandes : Doctrine et ManyToMany (1 heure et 45 minutes)
16 Leçons
📖 Introduction
Créer l'entité Purchase (commande)
Afficher la liste des commandes d'un utilisateur
Ajouter une date de commande et gérer les problèmes de migration
Refactoring de la liste de commandes
Relation ManyToMany entre Purchase et Product
Créer une ManyToMany avec des informations supplémentaires
📖 Premier récapitulatif
Formulaire de commande
Le Controller qui va gérer le formulaire (1/2)
Le Controller qui va gérer le formulaire (2/2)
Refactoring du Controller
Finaliser le processus de commande
Versionning avec Git
📖 Conclusion
Refactoring : créer une classe pour persister la Purchase
Architecture et paiement Stripe ! (55 minutes)
12 Leçons
📖 Introduction
Mise en place de la page de paiement
Créer une intention de paiement avec Stripe
Formulaire de carte bleue avec Stripe Elements
Finaliser le paiement après confirmation de Stripe
Refactoring : créer un StripeService
Définition du StripeService dans le fichier services.yaml
Refactoring du Javascript
Stocker les clés Stripes dans des variables d'environnement (.env)
Etudiez les Webhooks de Stripe !
Versionning avec Git
📖 Conclusion
Symfony et les événements (1 heure et 15 minutes)
15 Leçons
Introduction aux événements dans Symfony
Prérequis : passages par valeur / référence
Le design pattern Mediator
Voir les événements et les réactions dans le profiler
Plongée dans le coeur de Symfony : le Kernel et les événements
Création de notre premier Listener
Découverte et création de notre premier Subscriber
Premier récapitulatif
Créons et propageons notre propre événement : le PurchaseEvent
Création d'un Subscriber qui enverra des emails
Rappels sur les principes SOLID
Versionning avec Git
Conclusion
Exercice : créer un événement ProductViewEvent et y réagir
Corrigé : créer un événement ProductViewEvent et y réagir
Doctrine et les événements (30 minutes)
8 Leçons
Introduction au cycle de vie des entités
Automatismes dans les entités avec les Lifecycle Callbacks
Automatismes grâce aux Doctrine Listeners
Automatismes grâce au Entity Listeners
Conclusion et aide à la décision
Exercice : créer un automatisme avec Doctrine
Correction : créer un automatisme avec Doctrine
Versionning avec Git
Les emails avec le composant Mailer (35 minutes)
8 Leçons
Symfony Mailer : introduction
Tester l'envoi des emails avec Mailtrap.io
Installation du composant Mailer
Envoyer notre premier email !
Créer des emails en HTML via Twig et le TemplatedEmail
Envoyer un email de confirmation lors d'une commande
Conclusion
Versionning avec Git
Etendre Twig avec de nouveaux filtres (15 minutes)
5 Leçons
Enrichir Twig : Introduction
Créons le filtre "amount" pour afficher des prix
Rendre le filtre amount plus intelligent grâce aux paramètres
Enrichir Twig : conclusion
Versionning avec Git
Déployer Symfony 5 chez Heroku (47 minutes)
9 Leçons
Déploiement : introduction
Héberger le code sur GitHub
Créer une application chez Heroku
Configurer Apache grâce au .htaccess et à la recette apache-pack
Créer une instance de MySQL attachée à l'app Heroku
Mettre en place les variables d'environnement chez Heroku
Configurer Monolog pour voir les logs de l'application en prod
Configurer les scripts pour les migrations et les fixtures
Conclusion
Conclusion de la formation (9 minutes)
2 Leçons
Ouvertures et futurs apprentissages
Conclusion : bravo et merci 💕
Bonus : comprendre le ParamConverter de Symfony (en cours de tournage)
1 Leçon
Tournage en cours
Bonus : faire de l'upload de fichier dans un formulaire (en cours de tournage)
1 Leçon
Tournage en cours