Programme de Formation Zend Framework 2 : Approfondissement
Introduction
Rappels de notions de la formation Zend Framework 2 Initiation
Architecture MVC
L'accès aux données
Les formulaires
Authentification
Identification depuis une base de données
Crypter les données
Gestion des erreurs
Stocker les données
Déconnexion et destruction des données (Zend\Session)
Atelier: Réaliser un formulaire d'identification Droits et sécurité avec le Zend Framework 2 Définir les rôles
Définir les ressources
Définir les droits
Atelier: Associer des droits à un utilisateur Web Services
Déclaration et utilisation de services web : REST et JSON
Services Web WS-* : DOM, SOAP
Atelier: Utiliser Zend\SOAP ou Zend\REST
Programme de Formation Laravel : Initiation + Approfondissement
Présentation
Rappels : bibliothèques et frameworks
Architecture HTTP centrée et patron MVC
Composition du framework
Méthodes d’installation et composer
Installer Laravel via laravel/installerFondamentaux
Outils en ligne de commande Artisan
Serveur PHP embarqué d’Artisan
Serveur virtuel Laravel Homestead
Gestion des variables d’environnement via DotEnv
Arborescence de répertoire
Contrôleur
Contrôleur et principe de routage
Paramètres de routes, obligatoires, optionnels et sous contraintes
Groupe de routes
Middleware
Définition de contrôleurs
Contrôleur de ressource : mise en place d’un CRUD
Les objets Request et Response
Vues
Le moteur de gabarit Blade
Section de contenu et héritage
Échappement et XSS
Structure de contrôle (conditionnelle et itérative)
Inclusion de gabarit
Gestion des assets, Bootstrap et Vue.js
Compilation des assets via Laravel Mix
Modèle
Paramétrage de la connexion à la base
Présentation de Fluent Query Builder
Select, jointures, unions, clause where
Insert et updates
Déclarer et versionner son schéma via les Migrations
Peupler sa base avec les Seeders
Mettre en place et exploiter son schéma par rapport au métierEloquent ORM
Principe d’un ORM, le patron DAO
Définir ses entités
Chargement des instances
Insertion, mise-à-jour et suppression
Outils pratiques : exception NotFound, Soft Delete
Mise en place de Scopes : globaux, locaux et anonyme
Événement de cycle de vie
Formulaires
Gestion native des formulaires avec Laravel
Attacher ses formulaire au modèle
Mise en place de formulaire d’édition du modèle
Sécurité
Principe d’authentification
Gérer ses utilisateurs via Eloquent
Contrôleurs de connexion et de création de compte
Principe de contrôle d’accès
Mise en place de politique de contrôle d’accès
Internationalisation
Principe de fonctionnement
Mise en place de catalogue de traductions
Utilisation des catalogues
Gestion de la locale
Paramètres de substitution
Pluralisation
Tester son application
Principe de tests, tests unitaires et fonctionnels
Tests HTTP
Laravel Dusk, principe et installation
Définir un scénario de navigation
Interagir avec les différents éléments tels que liens, formulaire, clavier, souris
Mise en place d’un catalogue de testsPerformance
Différents types de cache à disposition : base de données et MemCache
Définir des instances de cache
Récupérer et enregistrer des éléments en cache
Envoyer des mails
Pilotes à disposition
Configurer le pilote
Utiliser un templatePassage de la certification (si prévue dans le financement)
Programme de Formation Laravel : Initiation
Présentation
Rappels : bibliothèques et frameworks
Architecture HTTP centrée et patron MVC
Composition du framework
Méthodes d’installation et composer
Installer Laravel via laravel/installerFondamentaux
Outils en ligne de commande Artisan
Serveur PHP embarqué d’Artisan
Serveur virtuel Laravel Homestead
Gestion des variables d’environnement via DotEnv
Arborescence de répertoire
Contrôleur
Contrôleur et principe de routage
Paramètres de routes, obligatoires, optionnels et sous contraintes
Groupe de routes
Middleware
Définition de contrôleurs
Contrôleur de ressource : mise en place d’un CRUD
Les objets Request et Response
Vues
Le moteur de gabarit Blade
Section de contenu et héritage
Échappement et XSS
Structure de contrôle (conditionnelle et itérative)
Inclusion de gabarit
Gestion des assets, Bootstrap et Vue.js
Compilation des assets via Laravel Mix
Modèle
Paramétrage de la connexion à la base
Présentation de Fluent Query Builder
Select, jointures, unions, clause where
Insert et updates
Déclarer et versionner son schéma via les Migrations
Peupler sa base avec les Seeders
Mettre en place et exploiter son schéma par rapport au métierEloquent ORM
Principe d’un ORM, le patron DAO
Définir ses entités
Chargement des instances
Insertion, mise-à-jour et suppression
Outils pratiques : exception NotFound, Soft Delete
Mise en place de Scopes : globaux, locaux et anonyme
Événement de cycle de vie
Formulaires
Gestion native des formulaires avec Laravel
Industrialiser avec laravelcollective/html
Attacher ses formulaire au modèle
Mise en place de formulaire d’édition du modèlePassage de la certification (si prévue dans le financement)
Programme de Formation Symfony Avancé
Introduction
Revue de l’architecture du framework
Évolution suivant les versions
Les événements et écouteurs
Découpler d’avantage de code métier via le gestionnaire d’événement
Créer un écouteur d’événement : EventListener
Créer un souscripteur d’événement : EventSubscriber
Événement natifs symfony et événements personnalisés
Altérer un comportement sans héritage via souscripteur d’événementLe composant Cache
Présentation du composant Cache
Cache contract vs PSR-6
Accéder et sauvegarder des données en cache
Supprimer, invalider ou programmer l’expiration des données
Liste des Adapters disponibles
Atelier : Mise en cache sous DoctrineLe composant Messenger
Comprendre les principes de communications inter-application
Créer le message et le handler
Diffuser le message
Les transports disponibles : AMQP, Redis, Doctrine, In Memory, …
Configurer les transports et le superviseur
Gérer des traitements en parallèle via MessengerLe composant Mail
Les composant Mail et Swift_mailer
Installation et configuration du transport
Créer un mail, gérer les adresses
Gérer le format de contenu : text/html, utiliser twig
Attacher un fichier, embarquer un image
Mettre en place les services d’envoi de mailLe composant Console Commands
Définir une commande
Gestion des entrées / sorties
Accès aux services
Tester les commandes
Sortie avancée : style et couleur
Sortie avancée : barre de progression, section, tableau
Entrées : distinguer arguments et options
Créer des questions : confirmation, information, choix
Définir des actions automatisables via des commandesFormulaire avancé
Créer un type de champs personnalisé avec son thème
Gérer les données associées modèle-normalisée-vue
Définir les DataTransformer associés et y injecter des services
Définir un DataMapper pour les données composé
Associer son type de champs personnalisé via un FormGuesser
Modifier dynamiquement le formulaire via les événements de formulaire
Mise en place de champs de formulaires avancésIntégration de WebPack Encore
Installation et configuration Yarn / Webpack
Définir les entrées webpack et leur ressources associées
Inclure les entrées dans Twig
Gérer les dépendances dynamiquement avec les modules ES6
Utiliser Sass, Less ou Stylus
Utiliser Typescript
Passer des données de Twig au javascript
Gestion du cache et versionning
Mettre en place une interface richeLes tests unitaires et fonctionnels
Utilisation de PHPUnit Bridge
Tests unitaires des services métier
Tests fonctionnels et gestion des formulaires
Gestion des dates : ClockMock
Mise en place de procédures de testsMise en Application : Mettre en place une API REST avec authentificationPassage de la certification (si prévue dans le financement)
Programme de Formation API Platfom : Fondamentaux
Introduction
Rappel sur Symfony et les API
Découvrir API Platform
Connaitre les avantages et inconvénients
Atelier : Installer API PlatformLes bases d'API Platform
Créer une entité
Exposer une entité
Lier API Platform à une base de données
Découvrir la norme de description OpenAPI
Documenter notre API à travers Hydra, SwaggerUI ou ReDoc
Choisir le format d'affichage des données (html, json, json+ld)
Atelier : Manipuler des jeux de données à l'aide de SwaggerUI et PostmanLes opérations
Personnaliser le CRUD à l'aide des opérations
Renommer une entité
Comprendre le fonctionnement des urls et des formats
Debugger les routes de l'api : la commande debug:router
Redéfinir les urls d'une entité
Atelier : Personnaliser le crud d'une entitéLimiter l'exposition des données
Utiliser le composant de sérialisation de Symfony
Créer des groupes de sérialisation
Limiter l'exposition des propriétés en lecture : normalizationContext
Personnaliser l'affichage d'une propriété depuis les accesseurs
Contrôler les groupes d'écriture : denormalizationContext
Atelier : Définir les propriétés à afficher et à insérerUtiliser les règles de validation
Utiliser le composant de validation de Symfony
Attribuer des contraintes sur les propriétés
Créer des groupes de validation
Associer un groupe de validation à une opération : validationContext
Atelier : Valider les données lors d'une insertion ou une modificationPagination et Filtres
Afficher et modifier la configuration d'api platform
Obtenir les informations de pagination
Activer et exposer la pagination dans l'url
Créer des filtres de données avec l'attribut ApiFilter
Utiliser les filtres par défaut (DateFilter, SearchFilter, RangeFilter, etc)
Paramétrer les filtres en fonction du type de donnée
Atelier : mettre en place des filtresRelation entre les entités
Créer des relations/associations entre les entités
Lier les données à l'aide des IRI (International Resource Identifier)
Afficher les informations d'une relation de façon détaillée
Insérer, modifier, supprimer les valeurs d'une relation et les valider
Créer des liens dédier pour accéder aux sous ressources
Atelier : créer une relation entre deux entités et afficher les donnéesSécurité
Identifier les différents type d'authentification
Créer une entité utilisateurs et un contrôleur pour l'authentification
Configurer l'authentification dans le fichier security.yaml
Gérer les différents type d'erreurs d'authentification
Restreindre l'accès à l'API depuis les routes, les contrôleurs, les classes
Atelier : créer une authentification pour les utilisateursAtelier : limiter l'accès en lecture et écriture aux utilisateurs non connectéTélécharger des fichiers
Installer le composant VichUploader
Manipuler les types fichier : POST et multipart/form-data
Créer un decoder et denormalizer personnalisé pour le multipart/form-data
Documenter l'entité avec openapi
Atelier : télécharger et récupérer des images
Programme de Formation Framework PHP Symfony Initiation + Approfondissement
Introduction
Framework PHP : définition et revue du marché
Principes d’architecture : centrage HTTP, orientation objet, orientation service
Anatomie du framework : le kernel, les composants et les bundles
Installer et configurer un projet
Configurer l’environnement, gérer les pré-requis, l’exécutable symfony
Démarrer le projet avec symfony ou composer, choisir son squelette de départ
Ajouter des paquets avec Symfony Flex pour composer
Les répertoires du projet
Configurer le projet via les fichiers de config
Paramétrer son environnement via DotEnv
Choisir et utiliser son serveur de développement
Atelier: Installer, configurer et lancer un projet SymfonyCréer des pages : les contrôleurs
Reconnaître les URLs demandées via les routes
Produire la réponse HTTP par les classes de contrôleur
Utiliser les annotations de routes
Affiner la gestion des routes : paramètres, valeurs par défaut, contraintes, methodes
Convertir automatiquement les paramètres
Maîtriser le dialogue HTTP via les objets du composant HttpFoundation
Débuguer les routes
Profiler les pages
Atelier: Créer ses premières pagesTemplating
Principe d’un moteur de template et présentation de Twig
Configurer Twig : chemin, échappement automatique, variables globales, …
Revue de la syntaxe : les tags et les interpolations
Référencer les pages, créer des liens hypertexte
Référencer des ressources JS, CSS et images
Factoriser les templates : l’héritage, l’inclusion et la sous-requête
Améliorer le rendu des pages, mettre en place un système de navigationBase de données (Doctrine)
Comprendre le rôle d’un ORM
Installation et configuration de Doctrine
Créer une classe d’entité
Utiliser les migrations: créer le schéma
Enregistrer un objet en base
Charger des objets depuis la base
Charger automatiquement depuis la route (ParamConverter)
Mis en place de relations/associations
Atelier: lier le contenu des pages à la base de donnéesLes formulaires
Construire le formulaire et l’association à une classe de données
Rendre le formulaire en HTML
Réceptionner et valider les données
Créer ses propres validateurs
Les classes de formulaire
Personnaliser le rendu (theming)
Créer les formulaires de saisieLa sécurité
Principe de fonctionnement: authentification et autorisation
Créer sa classe d’utilisateur, le fournisseur et gérer l’encodage des mot-de-passes
Authentifier l’utilisateur sur un contexte de pare-feu
Contrôler l’accès sur des rôles au niveau du pare-feu, des routes ou dans le code
Créer des règles personnalisées avec des voters
Authentifier les utilisateurs et restreindre l’accès aux pagesInternationalisation
Configurer la langue, utiliser des catalogues
Rédiger les catalogues de messages
Traduire les validations, les entités, les urls, …
Gérer la locale utilisateur
Mettre en place des traductionsLes services
Utilisation des services du ServiceContainer
Injection de services et de configuration
Les services publics et privés
Renommer les services à l’aide des alias
Paramétrer les services et gérer les arguments
Paramétrer le câblage auto et la configuration auto
Lier des arguments par leur nom ou leur type
Atelier: Déporter les traitements dans des servicesGestion de performances
Revoir les fondamentaux du cache HTTP
Comparer les deux modèle de gestion de cache Expiration et Validation
Mettre en place la stratégie de cache sur les routes et dans les contrôleurs
Exploiter des fragments de pages mis en cache via les Edge Side Includes
Atelier: Réduire les temps de rendus des pages en s’appuyant sur le cache HTTP et les ESIPassage de la certification (si prévue dans le financement)