📖 Composer et les bibliothèques tierces

Dans n'importe quel projet informatique, on aime utiliser des bibliothèques (ou library en anglais) qui viennent d'ailleurs et qui vont nous faciliter la tâche.

En PHP aussi .. Mais comment faire pour utiliser ces librairies externes sans que cela ne devienne un vrai casse-tête ? Composer est là pour nous aider !

📖 Plus d'informations sur Composer : https://getcomposer.org/

Symfony 5 par la pratique

Acheter maintenantEn savoir plus

A propos de cette formation (15 minutes)

  • Présentation de la formation26
  • Ce que l'on va faire ensemble 😊3
  • Mise en place de VSCode9
  • Les outils nécessaires (PHP 7.2, Composer, Git ...)17
  • Rendre PHP disponible dans la CMD de Windows6
  • La CLI (ligne de commande) Symfony23
  • Tirer profit au mieux de cette formation2
  • Jouer les vidéos automatiquement (autoplay)8

Rafraichissement : le PHP de nos jours (30 minutes)

  • Le serveur interne de PHP6
  • L'autoloading (chargement automatique des classes)7
  • Composer et l'autoloading28
  • 📖 Composer et les bibliothèques tierces2
  • Installer des bibliothèques tierces avec Composer4
  • 📖 PHP moderne : Récapitulatif6
  • Rafraichissement : le PHP de nos jours (30 minutes): Quiz
  • 📖 Les commandes du développement moderne avec PHP3

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 51
  • 📖 Une spécificité de Symfony : La modularité
  • Créons notre application Symfony 5.1 !43
  • Lancer le serveur avec la commande `symfony serve`26
  • 📖 Les commandes à connaître quand on débute avec la CLI de Symfony3

Les bases de Symfony : HttpFoundation et Routing (45 minutes)

  • Premières pages : les Routes et les Controllers27
  • HttpFoundation : Requête et Réponse HTTP !19
  • Routes paramétrables : valeurs par défaut et contraintes9
  • Contraintes de Routes5
  • Configuration des Routes et fichiers YAML6
  • Configurer les routes sous forme d'Annotations (@Route)13
  • Symfony Flex : booster Composer et le rendre Surpuissant !65
  • Routes, Controllers, HttpFoundation : Récapitulatif2
  • Exercice : créez une page Hello World11
  • Correction : créez une page Hello World57
  • Les bases de Symfony : HttpFoundation et Routing (45 minutes): Quiz
  • 📖 Fiche de révision : Routing, Controller et HttpFoundation12

Les bases de Symfony : Le container de services (50 minutes)

  • Introduction au container de services de Symfony38
  • Créez vos propres services !26
  • 📖 Comprendre le Container de Services de Symfony4
  • Voir le Container de Services à l'oeuvre !28
  • Les limites du Container : configuration des services25
  • Utilisez des bibliothèques tierces avec le Container13
  • 📖 La différence entre une bibliothèque et un Bundle Symfony13
  • 📖 Container de Services : Récapitulatif15
  • 📖 Interlude : l'ArgumentResolver dans Symfony2
  • Exercice #01 : Créez un service "Detector"19
  • Correction #01 : Créez un service "Detector"22
  • Exercice #02 : Configuration d'un seuil de TVA2
  • Correction #02 : Configuration d'un seuil de TVA13
  • Les bases de Symfony : Le container de services (50 minutes): Quiz

A la découverte de Twig ! (65 minutes)

  • 📖 Introduction à Twig !2
  • Notre premier template Twig25
  • Twig : Les tags et les filtres3
  • Exercice #01 : Boucle for et if
  • Correction #01 : Boucle for et if6
  • Twig : Exploiter des tableaux associatifs ou des objets3
  • Twig : Héritage de templates et système de blocks9
  • Twig : Inclusions de templates7
  • 👌 Bonnes pratiques : créons une fonction render()9
  • Découverte de la classe AbstractController13
  • Twig : créons ensemble la page d'accueil du site14
  • Twig : créons une barre de navigation23
  • Twig : Récapitulatif7
  • A la découverte de Twig ! (65 minutes): Quiz

Doctrine et les bases de données (1 heure 35 minutes)

  • 📖 Introduction à Doctrine4
  • Doctrine : Installation du Bundle (donc des services 😉)28
  • 📖 Introduction au système de Migrations9
  • Création de la base de données72
  • Créer une entité Product et la migration qui va avec109
  • Découverte d'un Repository Doctrine15
  • Manipuler des enregistrements avec le Manager de Doctrine10
  • Exercice #01 : Créez une entité Category2
  • Correction #01 : Créez une entité Category9
  • Travailler et naviguer dans les migrations3
  • 📖 Doctrine : Premier récapitulatif
  • Créer des jeux de fausses données avec les Fixtures11
  • Attention : mise à jour concernant Faker1
  • Utiliser Faker pour plus de réalisme dans nos données20
  • Enrichir Faker pour plus de réalisme encore38
  • Créer de véritables Slugs avec le composant String18
  • 📖 Doctrine : Deuxième récapitulatif1
  • Créer une association entre Product et Category25
  • Ajouter un champ dans l'entité Product29
  • Utiliser nos entités dans un template Twig13
  • 📖 Doctrine : Dernier récapitulatif3
  • 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 !20

Twig : aller plus loin (35 minutes)

  • Créer la page d'une Category avec ses Products23
  • Créer la page d'un Product33
  • Ajouter un fil d'Ariane (Breadcrumb) sur nos pages10
  • Routes "statiques" : le problème des URLs écrites en dur
  • 👌 Génération des URLs avec l'UrlGenerator et la fonction path()12
  • 📖 Récapitulatif6
  • 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 produit4
  • Configurer un formulaire avec le FormBuilder10
  • Configurer les champs du formulaire7
  • Remplir un ChoiceType avec les données de la base4
  • Utiliser les champs EntityType pour afficher les données de la base32
  • Twig : Les fonctions de rendu pour les formulaires2
  • Twig : Découverte des thèmes de formulaires2
  • Twig : Les thèmes de formulaires livrés avec Symfony17
  • 📖 Formulaires : Premier récapitulatif1
  • Soumission du formulaire et récupération des données14
  • Récupérer les données sous la forme d'un objet précis (data_class)10
  • Faire persister une entité issue d'un formulaire
  • 👌 Créer une classe de formulaire10
  • Form : les raccourcis offerts par l'AbstractController2
  • Créer un formulaire de modification22
  • Créer une Redirection après la soumission d'un formulaire11
  • 📖 Formulaires : Deuxième récapitulatif
  • Exercice #01 : Créez un CategoryController avec deux Routes
  • Correction #01 : Créez un CategoryController avec deux Routes5
  • 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égorie2
  • Exercice #03 : Créez le formulaire de modification d'une catégorie9
  • Correction #03 : Créez le formulaire de modification d'une catégorie16
  • 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 formulaire12
  • Transformer les données d'un formulaire grâce aux événements23
  • Transformer des données avec un DataTransformer10
  • DataTransformer : factoriser le code dans une classe !6
  • Créer ses propres types de champs !6
  • 📖 Récapitulatif2
  • 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)13
  • Validation de données complexes (tableaux)9
  • Validation d'objets grâce à YAML9
  • Validation d'objets en PHP2
  • Utiliser l'espace de noms Constraints (Assert)1
  • Validation d'objets grâce aux annotations22
  • Validation d'un formulaire26
  • Les groupes de validation2
  • Finitions et versionning avec Git30
  • Exercice : validez les catégories !
  • Corrigé : validez les catégories !4
  • 📖 Récapitulatif15
  • 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 : Introduction4
  • Twig : appeler un controller directement depuis un template
  • Twig : Injecter une variable globale dans nos templates17
  • 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 applications1
  • Installation du composant Security16
  • L'entité User pour représenter nos utilisateurs7
  • Mise à jour des fixtures2
  • Hasher les mots de passes pour plus de sécurité22
  • 📖 Introduction aux Authenticator de Symfony1
  • La commande make:auth9
  • Page de login et problèmes de routage8
  • Jouer avec les priorités des routes5
  • Formulaire de connexion (login)8
  • Authenticator : la méthode supports()8
  • Authenticator : compléter la procédure d'authentification24
  • Les échecs possibles pendant l'authentification5
  • Gérer les échecs / succès de l'authentification1
  • Obtenir la raison de l'échec de l'authentification (AuthenticationUtils)11
  • Modifier les messages d'erreur27
  • 📖 Premier récapitulatif2
  • L'Authenticator "form_login" livré par Symfony25
  • Gérer la déconnexion avec l'option "logout"7
  • Mise en forme de la barre de navigation4
  • 📖 Deuxième récapitulatif1
  • Interlude : les commandes essentielles (config:dump et debug:config)4

La sécurité : autorisations et rôles (50 minutes)

  • 📖 Introduction aux autorisations dans Symfony 5
  • La méthode "start()" de l'authenticator et les ACL6
  • Découverte du service Security8
  • Les raccourcis de l'AbstractController pour la sécurité3
  • Contrôler les accès grâce à l'annotation @IsGranted8
  • Contrôler l'accès à un objet en particulier1
  • Encapsuler la logique d'accès dans un Voter2
  • 📖 Vraiment comprendre les Voters2
  • Remise en place avant de passer à la suite
  • 📖 Récapitulatif sur la sécurité dans Symfony 53
  • Versionning avec Git

La session dans Symfony 5 (1 heure et 30 minutes)

  • Mise en place du panier et découverte de la session7
  • Sécuriser la procédure d'ajout d'un produit au panier6
  • Se faire "livrer" la session grâce à la SessionInterface
  • Découverte des "bags" et du FlashBag8
  • Afficher les message Flash dans Twig8
  • Les raccourcis de l'AbstractController5
  • Refactoring Twig et inclusion de templates4
  • Afficher l'état du panier dans une page18
  • 📖 Premier récapitulatif
  • Refactoring : Créer un CartService qui embarque toute la gestion du panier26
  • Refactoring : créer une classe qui représente un élément du panier32
  • Rendre le CartService disponible dans nos templates Twig6
  • Finalisations : incrémenter, décrémenter, supprimer les éléments du panier4
  • Refactoring du CartService4
  • Versionning avec Git
  • 📖 Conclusion6

Commandes : Doctrine et ManyToMany (1 heure et 45 minutes)

  • 📖 Introduction
  • Créer l'entité Purchase (commande)28
  • Afficher la liste des commandes d'un utilisateur20
  • Ajouter une date de commande et gérer les problèmes de migration10
  • Refactoring de la liste de commandes8
  • Relation ManyToMany entre Purchase et Product10
  • Créer une ManyToMany avec des informations supplémentaires17
  • 📖 Premier récapitulatif3
  • Formulaire de commande1
  • Le Controller qui va gérer le formulaire (1/2)17
  • Le Controller qui va gérer le formulaire (2/2)20
  • Refactoring du Controller9
  • Finaliser le processus de commande4
  • Versionning avec Git
  • 📖 Conclusion1
  • Refactoring : créer une classe pour persister la Purchase9

Architecture et paiement Stripe ! (55 minutes)

  • 📖 Introduction6
  • Mise en place de la page de paiement1
  • Créer une intention de paiement avec Stripe17
  • Formulaire de carte bleue avec Stripe Elements72
  • Finaliser le paiement après confirmation de Stripe8
  • Refactoring : créer un StripeService3
  • Définition du StripeService dans le fichier services.yaml2
  • Refactoring du Javascript3
  • Stocker les clés Stripes dans des variables d'environnement (.env)
  • Etudiez les Webhooks de Stripe !14
  • Versionning avec Git5
  • 📖 Conclusion4

Symfony et les événements (1 heure et 15 minutes)

  • Introduction aux événements dans Symfony
  • Prérequis : passages par valeur / référence3
  • 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énements11
  • Création de notre premier Listener3
  • Découverte et création de notre premier Subscriber8
  • Premier récapitulatif1
  • Créons et propageons notre propre événement : le PurchaseEvent
  • Création d'un Subscriber qui enverra des emails7
  • Rappels sur les principes SOLID1
  • Versionning avec Git1
  • Conclusion
  • Exercice : créer un événement ProductViewEvent et y réagir9
  • Corrigé : créer un événement ProductViewEvent et y réagir4

Doctrine et les événements (30 minutes)

  • Introduction au cycle de vie des entités
  • Automatismes dans les entités avec les Lifecycle Callbacks17
  • Automatismes grâce aux Doctrine Listeners13
  • Automatismes grâce au Entity Listeners4
  • Conclusion et aide à la décision
  • Exercice : créer un automatisme avec Doctrine
  • Correction : créer un automatisme avec Doctrine4
  • Versionning avec Git2

Les emails avec le composant Mailer (35 minutes)

  • Symfony Mailer : introduction
  • Tester l'envoi des emails avec Mailtrap.io
  • Installation du composant Mailer2
  • Envoyer notre premier email !7
  • Créer des emails en HTML via Twig et le TemplatedEmail
  • Envoyer un email de confirmation lors d'une commande14
  • Conclusion
  • Versionning avec Git

Etendre Twig avec de nouveaux filtres (15 minutes)

  • Enrichir Twig : Introduction
  • Créons le filtre "amount" pour afficher des prix4
  • Rendre le filtre amount plus intelligent grâce aux paramètres1
  • Enrichir Twig : conclusion
  • Versionning avec Git2

Déployer Symfony 5 chez Heroku (47 minutes)

  • Déploiement : introduction1
  • Héberger le code sur GitHub5
  • Créer une application chez Heroku30
  • Configurer Apache grâce au .htaccess et à la recette apache-pack7
  • Créer une instance de MySQL attachée à l'app Heroku15
  • Mettre en place les variables d'environnement chez Heroku
  • Configurer Monolog pour voir les logs de l'application en prod1
  • Configurer les scripts pour les migrations et les fixtures52
  • Conclusion6

Conclusion de la formation (9 minutes)

  • Ouvertures et futurs apprentissages4
  • Conclusion : bravo et merci 💕56

Bonus : comprendre le ParamConverter de Symfony (en cours de tournage)

  • Tournage en cours5

Bonus : faire de l'upload de fichier dans un formulaire (en cours de tournage)

  • Tournage en cours11