Symfony 3 Développez des sites web PHP structurés et performants
Présentation
Préface de Jordi BOGGIANO - Membre de l'équipe Symfony - Créateur de Composer
Ce support sur Symfony 3 s'adresse aux développeurs, chefs de projets, directeurs techniques, qui souhaitent, grâce à ce framework, structurer et organiser leurs développements PHP au sein d'un cadre de travail robuste et professionnel. La maîtrise de la programmation objet avec PHP est un prérequis indispensable pour tirer le meilleur parti de ces pages.
Le livre couvre les principaux composants de Symfony 3, considéré aujourd'hui comme le framework PHP de référence. Il fournit les connaissances de base qui permettent non seulement de créer un site web, mais également de comprendre et maîtriser son fonctionnement en détail. Un chapitre entier est par exemple consacré à l'architecture du framework.
Les sujets détaillés vont de l'installation de Symfony à la création de tests unitaires et fonctionnels. La gestion des formulaires, des interactions avec une base de données, des templates, de la journalisation ou même de la sécurité de l'application sont autant de thèmes exposés dans le livre.
Le temps de chargement des pages d'un site web étant un élément crucial, un chapitre délivre les techniques et astuces pour fortement améliorer les performances d'une application.
L'auteur a structuré les chapitres pour faciliter l'apprentissage de Symfony 3 et dévoile au fil des pages des conseils, bonnes pratiques et exemples détaillés.
Des éléments complémentaires sont en téléchargement sur le site www.editions-eni.fr.
Les chapitres du livre :
Préface – Avant-propos – Architecture du Framework – Débuter avec Symfony - Routage et contrôleur – L'injection de dépendances – Les templates avec Twig – Les bases de données avec Doctrine2 – Le répartiteur d'événements – Utiliser les formulaires – La sécurité – Logging et monitoring – Tester son application Symfony – Améliorer les performances de son application – Annexes
Ce support sur Symfony 3 s'adresse aux développeurs, chefs de projets, directeurs techniques, qui souhaitent, grâce à ce framework, structurer et organiser leurs développements PHP au sein d'un cadre de travail robuste et professionnel. La maîtrise de la programmation objet avec PHP est un prérequis indispensable pour tirer le meilleur parti de ces pages.
Le livre couvre les principaux composants de Symfony 3, considéré aujourd'hui comme le framework PHP de référence. Il fournit les connaissances de base qui permettent non seulement de créer un site web, mais également de comprendre et maîtriser son fonctionnement en détail. Un chapitre entier est par exemple consacré à l'architecture du framework.
Les sujets détaillés vont de l'installation de Symfony à la création de tests unitaires et fonctionnels. La gestion des formulaires, des interactions avec une base de données, des templates, de la journalisation ou même de la sécurité de l'application sont autant de thèmes exposés dans le livre.
Le temps de chargement des pages d'un site web étant un élément crucial, un chapitre délivre les techniques et astuces pour fortement améliorer les performances d'une application.
L'auteur a structuré les chapitres pour faciliter l'apprentissage de Symfony 3 et dévoile au fil des pages des conseils, bonnes pratiques et exemples détaillés.
Des éléments complémentaires sont en téléchargement sur le site www.editions-eni.fr.
Les chapitres du livre :
Préface – Avant-propos – Architecture du Framework – Débuter avec Symfony - Routage et contrôleur – L'injection de dépendances – Les templates avec Twig – Les bases de données avec Doctrine2 – Le répartiteur d'événements – Utiliser les formulaires – La sécurité – Logging et monitoring – Tester son application Symfony – Améliorer les performances de son application – Annexes
Table des matières
Avant-propos
- 1. Introduction
- 2. Public visé
- 3. Pourquoi un framework ?
- 3.1 header() et echo
- 3.2 Éviter la globalité
- 3.3 Ne pas réinventer la roue
- 4. Pourquoi Symfony ?
- 5. Prérequis
- 6. Objectifs du livre
Architecture du framework
- 1. Le patron de conception MVC
- 1.1 Définitions
- 1.1.1 La vue
- 1.1.2 Le modèle
- 1.1.3 Le contrôleur
- 1.1 Définitions
- 1.2 En pratique
- 1.2.1 Le contrôleur frontal
- 1.2.2 Le routage
- 1.2.3 Le contrôleur et le modèle
- 1.2.4 La vue
- 2.1 Schéma
- 2.2 Le Service Container
- 2.3 Un framework MVC ?
- 2.4 Une flexibilité à toute épreuve
- 3.1 Concept
- 3.2 Un écosystème mature
- 4.1 Principe
- 4.2 En pratique
- 4.2.1 Contexte HTTP
- 4.2.2 Contexte CLI (Command Line Interface)
- 4.2.3 Exemples de différences selon l’environnement
Débuter avec Symfony
- 1. Créer un projet sous Symfony
- 1.1 L’édition « standard »
- 1.2 Prérequis
- 1.3 Installation via l’installeur Symfony (Linux et Mac OS)
- 1.4 Installation via Composer
- 1.4.1 Installer Composer
- 1.4.2 Créer un projet
- 1.4.3 Les versions
- 2.1 Configurer son serveur web
- 2.1.1 Serveur web PHP
- 2.1.2 Apache et Nginx
- 3.1 Emplacement
- 3.2 Les commandes
- 3.2.1 Lister les commandes disponibles
- 3.2.2 Exécuter une commande
- 3.6.1 Les raccourcis
- 3.6.2 L’autocomplétion
- 4.1 Le standard PSR-4
- 4.2 Autres mécanismes
- 4.3 Le fichier vendor/autoload.php
- 5.1 Bundle applicatif spécifique au projet
- 5.1.1 Présentation
- 5.1.2 Créer un bundle
Routage et contrôleur
- 1. Comprendre le routage
- 1.1 Définition
- 1.2 Le répertoire web et le contrôleur frontal
- 1.3 Une requête, une action
- 2. Format des routes
- 2.1 Différentes méthodes
- 2.2 Les annotations
- 3. Configurer le path
- 3.1 Le path /hello/world
- 3.2 Comprendre la notation du contrôleur
- 3.3 Choisir son format
- 3.4 Importer ses routes depuis des fichiers externes
- 3.5 Utiliser des paramètres de substitution
- 3.6 Comprendre l’ordre de chargement des routes
- 3.7 Préfixer les routes
- 3.8 Ajouter des restrictions
- 4. Routage par nom de domaine
- 4.1 Prérequis
- 4.2 Exemple
- 4.3 Explications
- 5. Le contrôleur
- 5.1 Récupérer un service
- 5.2 Utiliser les « paramètres magiques »
- 5.2.1 Paramètres de substitution des routes
- 5.2.2 Exemples
- 5.3 Générer une URL
- 5.4 Effectuer une redirection
- 5.5 Redirection interne
- 5.6 Renvoyer des pages d’erreurs
- 5.6.1 Le contrôleur
- 5.6.2 La vue
L’injection de dépendances
- 1. Une alternative au Singleton
- 1.1 Présentation du Singleton
- 1.2 Exemple
- 1.3 Un patron de conception à utiliser avec précaution
- 2. L’injection de dépendances
- 2.1 L’injection de dépendances par le constructeur
- 2.2 L’injection de dépendances par setter (mutateur)
- 2.3 L’injection de dépendances par propriété
- 2.4 Les avantages
- 2.5 Une exécution complexifiée
- 3. Le Service Container
- 3.1 Les services
- 3.2 Explications au travers d’un service X
- 4. Créer un service et configurer ses injections
- 4.1 Créer un service
- 4.2 Injection par constructeur
- 4.3 Injection par méthode
- 4.4 Injection par propriété
- 4.5 Injection automatique avec l'autowiring
- 4.6 Utiliser des paramètres
- 4.7 Créer des services « lazy »
- 5. Les extensions de bundle
- 5.1 Le dossier DependencyInjection
- 5.2 Les définitions de services depuis un bundle
- 5.3 La configuration
- 5.3.1 Définir une arborescence
- 5.3.2 Les différentes étapes du traitement de la configuration
- 5.3.3 Récupérer la configuration validée
- 5.4 Les « Compiler Passes »
- 5.4.1 Concept
- 5.4.2 Les tags
- 5.4.3 Le Compiler Pass
Les templates avec Twig
- 1. Un langage accessible
- 1.1 Aperçu
- 1.2 Pourquoi un nouveau langage ?
- 1.3 Mise en pratique
- 1.4 Remarques sur l’utilisation
- 1.5 Notations des templates
- 1.6 L'annotation @Template
- 2. Layouts (gabarits de pages) et blocks
- 3. Structures de contrôle et tags
- 3.1 Les conditions
- 3.2 Les boucles
- 3.3 Créer et modifier des variables
- 3.4 Twig et l’échappement
- 3.4.1 Le tag autoescape
- 3.4.2 Échappement unitaire
- 3.4.3 Modifier la stratégie globale (utilisateurs avancés)
- 3.5 Inclure des templates
- 4.1 Les filtres
- 4.1.1 Utilisation et syntaxe
- 4.1.2 Chaînes de caractères
- 4.1.3 Échappement
- 4.1.4 L’encodage
- 4.2.1 Twig et le routage
- 4.2.2 Débogage avec la fonction dump
- 5.1 Comment ces ressources sont-elles synchronisées ?
- 5.2 Référencer les ressources publiques depuis un template
Les bases de données avec Doctrine2
- 1. Concepts de DBAL, entité et ORM
- 1.1 DBAL
- 1.2 Entité
- 1.3 ORM
- 2. Installer et configurer DoctrineBundle
- 2.1 Installation
- 2.2 Configuration
- 3. Les entités et leur mapping
- 3.1 Cas pratique : répertorier des livres
- 3.1.1 L’entité
- 3.1.2 Le mapping
- 3.1 Cas pratique : répertorier des livres
- 3.2 Définir une entité avec @ORM\Entity
- 3.3 Gérer les colonnes de la table avec @ORM\Column
- 3.3.1 name
- 3.3.2 type
- 3.3.3 length
- 3.3.4 unique
- 3.3.5 nullable
- 3.3.6 precision et scale
- 3.4 @ORM\Table
- 3.5 Les clés primaires
- 3.6 Configurer les index
- 3.6.1 @ORM\Index
- 3.6.2 @ORM\UniqueConstraint
- 3.7 Les relations (clés étrangères)
- 3.7.1 @ORM\OneToOne
- 3.7.2 @ORM\ManyToOne
- 3.7.3 @ORM\ManyToMany
- 3.7.4 Relations bidirectionnelles
- 3.7.5 Repérer les erreurs de mapping
- 4.1 Insertion de données
- 4.2 Modification de données
- 4.3 Suppression de données
- 4.4 Autres actions de l’EntityManager
- 4.4.1 refresh()
- 4.4.2 detach()
- 5.1 Les repositories
- 5.1.1 Un rôle de centralisateur
- 5.1.2 Les méthodes de base du repository
- 5.1.3 Les méthodes personnalisées du repository
- 5.2.1 SELECT
- 5.2.2 FROM
- 5.2.3 JOIN et LEFT JOIN
- 5.2.4 WHERE
- 5.2.5 ORDER BY
- 5.2.6 Les limites
- 5.2.7 Les limites et la pagination
- 6.1 Utilisation du @ParamConverter
- 6.2 Les extensions Doctrine
- 6.2.1 Installation
- 6.2.2 Utilisation d'un slug sur une entité
Le répartiteur d’événements
- 1. Une histoire d’écoute
- 1.1 Le dispatching
- 1.2 Les listeners
- 2. Les événements du Kernel
- 2.1 Les événements
- 2.2 Exemple : effectuer des tâches asynchrones
- 3. Les événements de la console
- 3.1 Prérequis
- 3.2 Les événements
Utiliser les formulaires
- 1. Une librairie MVC
- 1.1 Le modèle
- 1.2 Le contrôleur
- 1.3 La vue
- 2. Fonctionnement du composant
- 2.1 L’objet « Form »
- 2.1.1 Soumission
- 2.1.2 Validation
- 2.1.3 Vue
- 2.1 L’objet « Form »
- 2.2 Les types
- 2.3 Les options
- 2.4 Les objets « Form » et « FormBuilder »
- 2.4.1 Le FormBuilder
- 2.4.2 Structure de l’objet Form
- 2.5 Le mapping avec l’objet de la couche Modèle
- 2.6 Les différentes représentations des valeurs
- 2.6.1 Transformation des données
- 2.6.2 Illustration avec le type Date
- 3.1 L’héritage
- 3.2 FormType
- 3.2.1 label
- 3.2.2 label attr
- 3.2.3 data
- 3.2.4 required
- 3.2.5 disabled
- 3.2.6 mapped
- 3.2.7 property_path
- 3.2.8 attr
- 3.2.9 trim
- 3.2.10 error_bubbling
- 3.5.1 type
- 3.5.2 first_options et second_options
- 3.5.3 options
- 3.5.4 first_name
- 3.5.5 second_name
- 3.5.6 invalid_message
- 3.6.1 choices
- 3.6.2 expanded et multiple
- 3.6.3 placeholder
- 3.6.4 preferred_choices
- 3.6.5 Types similaires
- 3.7.1 class
- 3.7.2 choice_label
- 3.7.3 query_builder
- 3.7.4 group_by
- 3.7.5 em
- 3.8.1 widget
- 3.8.2 format
- 3.8.3 model_timezone
- 3.8.4 view_timezone
- 3.8.5 years
- 3.8.6 months
- 3.8.7 days
- 3.8.8 placeholder
- 3.8.9 Types similaires
- 3.9.1 multiple
- 3.9.2 Récupérer les fichiers
- 3.9.3 Traiter les fichiers
- 4.1 Objectif
- 4.2 Utilisation
- 4.2.1 Contraintes
- 4.2.2 Configuration des contraintes
- 4.2.3 Les différents formats de configuration
- 4.2.4 Les options
- 4.2.5 Validation d’un objet hors du contexte d’un formulaire
- 4.3.1 NotBlank et NotNull
- 4.3.2 IsNull et Blank
- 4.3.3 IsTrue, IsFalse
- 4.3.4 Type
- 4.3.5 Email, Url et Ip
- 4.3.6 Regex
- 4.3.7 Length, Count
- 4.3.8 Range
- 4.3.9 Comparaisons
- 4.3.10 Dates
- 4.3.11 File
- 4.3.12 Image
- 4.3.13 Choice
- 4.3.14 UniqueEntity
- 4.3.15 Données financières
- 4.3.16 Callback
- 4.3.17 All
- 4.3.18 Valid
- 5.1 La classe AbstractType
- 5.2 Utiliser un formulaire défini dans une classe
- 5.2.1 Instanciation manuelle
- 5.2.2 Avec l'injection de dépendances
- 6.1 Afficher le formulaire manuellement
- 6.1.1 form_start()
- 6.1.2 form_end()
- 6.1.3 form_widget()
- 6.1.4 form_errors()
- 6.1.5 form_label()
- 6.1.6 form_row()
- 6.1.7 form_rest()
- 6.1.8 form_enctype()
- 6.1.9 Arborescence des parties de formulaires
- 6.2.1 Formulaire d’exemple
- 6.2.2 Créer et associer un thème de formulaires
- 6.2.3 Comprendre le nom des blocks
La sécurité
- 1. Présentation
- 2. Authentification
- 2.1 Pare-feu
- 2.2 Pare-feu pour ressources statiques/développement
- 2.3 Authentification HTTP
- 2.4 Authentification par formulaire de connexion
- 2.5 Déconnexion
- 3. Utilisateurs et rôles
- 3.1 Récupérer l’utilisateur courant
- 3.2 L’utilisateur
- 3.3 Les fournisseurs d’utilisateurs
- 3.3.1 En mémoire
- 3.3.2 Fournisseur d’utilisateurs de bases de données
- 3.3.3 Fournisseur d’utilisateurs personnalisé
- 3.3.4 Notes additionnelles
- 3.4 Cryptage des mots de passe
- 3.4.1 Encodeurs
- 3.4.2 Le salage
- 3.4.3 Crypter un mot de passe
- 3.5 Les rôles
- 4.1 Les rôles, au cœur du processus
- 4.2 Vérifier le rôle de l’utilisateur
- 4.3 Sécuriser une action
- 4.4 Sécuriser une section de l’application
- 4.5 Sécuriser selon d’autres critères
- 4.6 Pour aller plus loin
Logging et monitoring
- 1. Créer des logs avec Monolog
- 1.1 Journalisation
- 1.2 Monolog
- 1.2.1 Le standard PSR-3
- 1.2.2 MonologBundle
- 1.3 Le service logger
- 1.4 Le fichier de logs
- 1.4.1 Identifier la cause d'un bogue
- 1.4.2 Le problème
- 1.5 Les gestionnaires (handlers)
- 1.5.1 Définir plusieurs gestionnaires
- 1.5.2 Envoyer des logs par e-mail
- 1.5.3 Utiliser un tampon (buffer)
- 1.5.4 Ajouter des informations complémentaires
- 1.6 Les canaux (channels)
- 1.6.1 Ajouter ses propres canaux
- 1.6.2 Envoyer un enregistrement sur un canal donné
- 1.6.3 Configurer les gestionnaires par canaux
- 1.6.4 Gestion des erreurs 404
- 2.1 Un allié proactif au logging
- 2.2 Préparation d’une application Symfony pour Prometheus
- 2.3 Instrumentaliser les mesures
- 2.4 Pour aller plus loin
Tester son application Symfony
- 1. Les tests unitaires et fonctionnels
- 1.1 Concept
- 1.1.1 L’automobile
- 1.1.2 Les tests sous Symfony
- 1.1 Concept
- 1.2 Installation de PHPUnit
- 2.1 Exécuter les tests
- 2.2 Exécuter une partie des tests
- 3.1 Tester une action
- 3.2 L’objet Client
- 3.3 L’objet Crawler
- 3.4 Soumettre un formulaire
- 3.5 Pour aller plus loin
Améliorer les performances de son application
- 1. La mise en cache de pages
- 1.1 Autour du protocole HTTP
- 1.2 Le proxy inverse (ou « reverse proxy »)
- 1.2.1 HttpCache
- 1.2.2 Nginx
- 1.2.3 Varnish
- 1.3 Les en-têtes
- 1.4 Les réponses publiques et privées
- 1.5 L’expiration
- 1.5.1 L’en-tête Expires
- 1.5.2 Les directives max-age et s-max-age
- 1.5.3 L’annotation @Cache
- 1.6 La validation
- 1.6.1 Par date avec Last-Modified
- 1.6.2 Par empreinte avec l’en-tête ETag
- 1.7 Les ESI
- 1.7.1 Activation
- 1.7.2 Générer une balise ESI
- 2.1 Générer un classmap
- 2.2 Englober le chargeur de classe de Composer
- 3.1 Les différents types de cache
- 3.1.1 Le cache des métadonnées
- 3.1.2 Le cache des requêtes
- 3.1.3 Le cache des résultats
- 6.1 Installation via PEAR
- 6.2 Installation depuis les sources
- 7.1 Choix de sa SAPI PHP
- 7.1.1 Qu'est-ce qu'une SAPI ?
- 7.1.2 Module du serveur
- 7.1.3 CGI
- 7.1.4 FastCGI
- 7.1.5 Conclusion
- 7.2.1 Les OPCodes
- 7.2.2 Une étape lourde
- 7.2.3 La mise en cache
- 7.3.1 Compression gzip
- 7.3.2 Précompression
- 7.4.1 Validation
- 7.4.2 Expiration
- 7.4.3 Autres techniques
- 8.1 Côté serveur
- 8.1.1 Apache Bench
- 8.1.2 Xhprof
Annexes
- 1. Développer son projet Symfony sur une machine virtuelle
- 1.1 Introduction à la virtualisation
- 1.2 Virtualisation et développement web
- 1.3 Installation
- 1.3.1 Configuration
- 1.3.2 Utilisation
- 2.1 La configuration d’une commande
- 2.2 Les objets input et output
- 2.3 Le Service Container
- 2.4 Commande d’exemple
- 3.1 Le protocole SMTP
- 3.2 Le transport
- 3.2.1 Le transport smtp
- 3.2.2 Le transport sendmail
- 3.2.3 Le transport mail
- 3.2.4 Choisir son transport
- 4.1 Installation
- 4.2 Aperçu des fonctionnalités
- 4.3 Activation des traductions
- 4.4 Configuration
- 4.4.1 Création de la classe utilisateur
- 4.4.2 Configuration de la sécurité
- 4.4.3 Configuration du bundle
- 4.6.1 Accéder au formulaire d'inscription
- 4.6.2 Personnaliser le formulaire avec un CAPTCHA
- 4.6.3 Envoi d'un e-mail de confirmation
- 5.1 Introduction
- 5.1.1 La culture (Locale)
- 5.1.2 Internationalisation
- 5.1.3 Régionalisation
- 5.2.1 Différentes possibilités
- 5.2.2 En pratique
- 5.6.1 Installation
- 5.6.2 Configuration de la stratégie
- 5.6.3 Traductions des routes
- 5.7.1 Emplacement
- 5.7.2 Règle de nommage
- 5.8.1 Le service translator
- 5.8.2 Les paramètres de substitution (placeholders)
- 5.8.3 Dans les templates Twig
- 6.1 Introduction
- 6.2 Intégration des sessions dans Symfony
- 6.3 Configuration du gestionnaire de sauvegarde
- 6.3.1 Avec PHP
- 6.3.2 Avec Symfony
- 7.1 Le déploiement
- 7.2 Faut-il déployer par FTP ?
- 7.3 Les différentes étapes
- 7.4 Capistrano et Capifony
- 7.4.1 Installation
- 7.4.2 Configuration
- 7.4.3 Déploiement
Auteur
Bilal AMARNIEn savoir plus
Bilal Amarni est consultant, développeur PHP freelance. Titulaire de la certification Symfony avec la mention Expert, il maîtrise complètement l’architecture du framework ainsi que son utilisation. Dans ces ouvrages, il partage avec le lecteur l'expérience qu'il a acquise au cours de ses différentes missions et projets.
Caractéristiques
- Niveau Confirmé à Expert
- Nombre de pages 402 pages
- Parution février 2018
- Reliure spirale - 17 x 21 cm (Médian)
- ISBN : 978-2-409-01173-3
- EAN : 9782409011733
- Ref. ENI : EIM3SYM
- Niveau Confirmé à Expert
- Parution février 2018
- HTML
- ISBN : 978-2-409-01175-7
- EAN : 9782409011757
- Ref. ENI : LNEIM3SYM
Téléchargements
- Des fichiers complémentaires (1,57 Mo)