Mettre en place VSCode pour travailler !

Pour ma part j'utilise VSCode pour travailler avec Symfony. Il existe d'autres solutions (notamment PHPStorm qui est hélas payant et assez complexe à mettre en oeuvre à mon goût) mais c'est celle que j'ai choisi.


Si vous voulez me suivre et vous aussi utiliser VSCode, il vous faudra installer quelques extensions, ainsi que mettre à jour la configuration.


Extension PHP Intelephense


Elle donne des tonnes d'outils pour travailler en PHP : Autocompletion, formattage du code, import automatique des namespaces etc etc : 


https://marketplace.visualstudio.com/items?itemName=bmewburn.vscode-intelephense-client



Extension PHP DocBlocker


Elle permet de générer rapidement des documentation pour les fonctions que l'on créé ! Essentiel pour documenter correctement le code.


https://marketplace.visualstudio.com/items?itemName=neilbrayfield.php-docblocker



Extension Twig Language 2


Elle permet la coloration syntaxique au sein des fichiers .twig que l'on va beaucoup utiliser durant cette formation !


https://marketplace.visualstudio.com/items?itemName=mblode.twig-language-2



Extension PHP Namespace Resolver


Essentielle lorsqu'on travaille avec le système des espaces de noms de PHP (les Namespaces), elle vous permettra de retrouver aisément dans quel espace de noms se trouve telle ou telle classe de Symfony.


https://marketplace.visualstudio.com/items?itemName=MehediDracula.php-namespace-resolver



Extension Simple React Snippets


Une extension pas dégueulasse qui permet de taper rapidement certaines choses récurrentes en React de façon simple (par exemple, la commande imr pour import React from "react" et plein d'autres ...)


https://marketplace.visualstudio.com/items?itemName=burkeholland.simple-react-snippets



Extension Prettier


Une extension qui permettra de formater correctement nos fichiers JS, HTML et CSS


https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode


Le paramétrage de VSCode :


La seule chose à modifier dans le paramétrage, c'est la possibilité de bénéficier de Emmet au sein des fichiers Twig et des fichiers JS (pour qu'on puisse faire du JSX simplement) !


 Pour ce faire, vous devez rajouter ce paramétrage (menu Fichiers > Préférences > Paramètres > Panneau de droite "Paramètres Utilisateur") :

    "emmet.includeLanguages": {
        "twig": "html",
        "javascript":"javascriptreact"
    },
    "emmet.triggerExpansionOnTab": true



Et voilà, vous devriez être prêt à bosser !

Développement Moderne avec ApiPlatform (Symfony) et React

Acheter maintenantEn savoir plus

Introduction

  • Qu'est-ce qu'une API ?!5
  • Rappels utiles sur HTTP1
  • Qu'est ce que l'architecture REST ?
  • Pourquoi utiliser API Platform ?1
  • Ce que vous allez découvrir dans cette formation
  • Les outils nécessaires pour suivre ce cours3
  • Mettre en place VSCode pour travailler !4
  • Voir ou revoir les bases de React avant de commencer

Symfony 4 #01 - Mise en place de l'application

  • Introduction1
  • Création d'une application Symfony 4 et mise en place de la base de données13
  • Mise en place des Clients : l'entité Customer8
  • Mise en place des Factures : l'entité Invoice8
  • Fixtures : Créer un jeu de fausses données19
  • Ajout d'un champ `chrono` sur l'entité Invoice
  • Mise en place du système d'authentification : l'entité User7
  • Fixtures : de faux utilisateurs dans notre base de données6
  • Fixtures : Gérer les chronos et la sécurité des mots de passe9
  • Conclusion et versionning du code avec GIT2

ApiPlatform #01 : Mise en place et découverte

  • Introduction de la section
  • Installer le composant API Platform sur l'application Symfony grâce à Composer8
  • Création de notre première Ressource grâce à l'annotation @ApiResource16
  • Présentation du logiciel PostMan pour tester notre API REST12
  • Le modèle de maturité de Richardson1
  • Découverte du format JSON-LD : JSON Linked Data3
  • Le concept d'IRI (adresses uniques) dans le format JSON-LD1
  • Le fichier de configuration d'API Platform5
  • Gestion de la pagination par défaut sur nos collections3
  • Surcharger la configuration pour une ressource en particulier1
  • Configurer le nombre d'éléments avec l'option itemsPerPage2
  • Surcharger la configuration dans une Requête HTTP8
  • Résumé : les 3 niveaux de configuration (globale, par ressource et par requête)
  • Donner un ordre par défaut à nos résultats4
  • SearchFilter : permettre une recherche sur nos résultats14
  • OrderFilter : permettre d'ordonner (trier) nos résultats
  • Cumuler les Filtres sur une ressource
  • Appliquer un filtre sur une propriété d'une ressource liée
  • Conclusion de la section

Exercices et mise en pratique

  • EXERCICE #01 - Bootstraper une API
  • EXERCICE #01 - Correction
  • EXERCICE #02 - Pagination et ordre
  • EXERCICE #02 - Correction2
  • EXERCICE #03 - Filtrage de recherche
  • EXERCICE #03 - Correction

ApiPlatform #02 : comprendre la sérialisation et la désérialisation

  • Introduction de la section
  • Comprendre les concepts de Sérialisation et Désérialisation1
  • Appliquer un groupe de sérialisation à l'entité Customer4
  • Appliquer un groupe de sérialisation à l'entité Invoice1
  • Gérer la sérialisation des ressources liées
  • Le problème des boucles infinies lors de la sérialisation3
  • Extraction des données liées au Customer10
  • Le concept de champs calculés
  • ApiPlatform #02 : Un petit Quiz ? 💪😉

ApiPlatform #03 - Les opérations possibles sur notre API REST

  • Introduction de la section
  • Les 5 opérations de base sur les collections ou sur les items1
  • Activer / Désactiver des opérations sur une ressource6
  • Configurer une opération2
  • Le concept de sous-ressource (SubResource)5
  • Configurer une sous-ressource
  • Sous-ressource et groupes de sérialisation10
  • Créer ses propres opérations57
  • ApiPlatform #03 : Un petit Quiz ? 💪😉

ApiPlatform #04 - Validation des données

  • Introduction de la section
  • Validation lors de la création / modification d'un Customer13
  • Validation simple lors de la création / modification d'une Invoice8
  • Validation de l'Invoice : le problème des types et le flag "disable_type_enforcement"12
  • Création d'un normalizer personnalisé pour les dates24
  • Validation lors de la création / modification d'un User14
  • Conclusion et versionning du code avec GIT

ApiPlatform #05 - Authentification avec JSON Web Token (JWT)

  • Introduction de la section
  • Installation du bundle LexikJwtAuthentication pour gérer les JWT68
  • Sécurisation des ressources pour notre API23
  • Utiliser les ACL pour cibler précisément nos ressources17
  • Conclusion et versionning du code avec GIT1

ApiPlatform #06 - Intervenir aux moments clés grâce aux événements du Kernel

  • Introduction de la section
  • Mise à jour Symfony 54
  • Comprendre le cycle de vie d'une Requête HTTP et les événements du Kernel
  • Intervenir sur la création d'un User pour hasher le mot de passe58
  • Intervenir sur la création d'un Customer pour le lier à l'utilisateur courant30
  • Intervenir sur la création d'une Invoice pour lui donner un chrono30
  • Intervenir sur la création du JWT pour enrichir ses données2
  • Extensions de Doctrine : modifier les requêtes DQL d'ApiPlatform50
  • Extension de Doctrine : ajout du cas d'utilisateurs non connectés
  • Conclusion et versionning du code avec GIT4

React #01 - Mise en place

  • Introduction de la section
  • Installation de Webpack Encore2
  • Découverte de la configuration de WebPack
  • Découverte des différents scripts de compilation WebPack12
  • Création de la page d'accueil de notre site qui portera l'application React
  • Inclure les liens vers les fichiers compilés29
  • Installation de React et des dépendances1
  • Branchement de l'application React à notre page d'accueil14

React #02 - Listings et routage

  • Introduction de la section
  • Création de la page d'accueil et de la barre de navigation11
  • Mise en place du routage avec React Router Dom18
  • Création de la page de liste des Customers1
  • Appel HTTP vers notre API pour récupérer les Customers34
  • Permettre la suppression d'un Customer
  • Suppression : l'approche optimiste et l'approche pessimiste
  • Mise en place d'une pagination sur la liste des Customers5
  • Refactorisation dans un composant de Pagination1
  • Paginer les données grâce à ApiPlatform5
  • Permettre de rechercher un Customer9
  • Refactorisation de la page des Customers10
  • Création de la page de liste des Invoices11
  • Conclusion et versionning du code avec GIT2

React #03 - Authentification JWT

  • Création du formulaire de connexion9
  • Connexion et récupération du JWT auprès de l'API28
  • Refactorisation du formulaire de connexion5
  • Permettre à l'utilisateur de se déconnecter5
  • Mise en place des véritables liens dans la barre de navigation
  • Charger le JWT dès le démarrage de l'application React3
  • Donner de la réactivité lors de la connexion et de la déconnexion6
  • Prendre en compte l'état de l'authentification au démarrage de l'application1
  • Naviguer automatiquement après une connexion ou une déconnexion
  • Créer des routes protégées et inaccessibles aux utilisateurs anonymes5
  • Refactoriser notre application en utilisant les Contexts de React5
  • Refactoriser le fichier app.js et créer un composant <PrivateRoute />2
  • Conclusion et versionning du code avec GIT6

React #04 - Formulaires

  • Création d'un composant <Field /> pour faciliter le développement de forms2
  • Customer : mise en place du formulaire13
  • Customer : validation et erreurs10
  • Customer : gérer la modification d'un customer9
  • Naviguer après la sauvegarde d'un nouveau Customer
  • Customer : refactrisation du code4
  • Invoice : mise en place du formulaire
  • Invoice : création d'un composant <Select /> pour les listes déroulantes7
  • Invoice : validation et erreurs21
  • Invoice : gérer la modification d'une facture19
  • Invoice : refactorisation du code2
  • Register : création du formulaire d'inscription18
  • Conclusion et versionning du code avec GIT4

React #05 - Ergonomie et réactivité

  • Afficher des notifications ultra cool avec React Toastify7
  • Créer des écrans de chargement avec React Content Loader4
  • Ajouter les derniers liens manquants dans l'application5
  • Conclusion et versionning du code avec GIT1

React #06 - Dernières retouches avant mise en production

  • BONUS : On expérimente un cache pour accélérer l'application6
  • Centraliser la configuration dans un seul fichier3
  • Conclusion et versionning du code avec GIT5

Déploiement

  • Introduction de la section
  • Injecter des variables d'environnement avec WebPack14
  • Découverte de Heroku1
  • Heroku : associer notre dépôt GitHub2
  • Heroku : Ajouter un addon pour MySQL1
  • Heroku : Gérer la configuration6
  • Heroku : Récupérer les logs de l'application8
  • Heroku : premier déploiement, premier bug !16
  • Heroku : correction du bug et redéploiement12
  • OVH : Mise en place12
  • OVH : Installer composer sur notre mutualisé6
  • OVH : Génération de l'application React en local7
  • OVH : Repositionner ses variables d'environnement en local47