Phalcon 3 Développez des applications web complexes et performantes en PHP
Présentation
Ce livre sur le framework Phalcon 3 donne les connaissances nécessaires pour développer des applications web en PHP, avec à la fin de chaque chapitre une présentation des nouveautés apportées par la version 4 du framework et, lorsque cela est nécessaire, les informations utiles pour réaliser une migration de la v3 à la v4. Ainsi, que vous soyez développeur débutant ou plus expérimenté souhaitant vous intégrer rapidement dans un projet développé avec Phalcon, lead-developer à la recherche d'un framework performant ou DevOps désirant améliorer l'infrastructure d'un projet Phalcon, ce livre est fait pour vous.
Le livre débute avec l'installation et le paramétrage d'un environnement de travail sous Windows ou Linux et avec Docker. Puis, progressivement, l'auteur vous mène vers les grandes étapes de développement d'un projet web avec Phalcon. Création d'un projet, services de Phalcon, gestion de requêtes HTTP, création de formulaires, génération de vues et gestion des différentes pages, interactions avec les bases de données sont autant d'étapes détaillées et illustrées par des cas concrets et des exemples variés.
Puis l'auteur étudie des fonctions avancées de Phalcon comme la gestion des logs, des erreurs, des événements, des droits d'accès et de la sécurité. La gestion du cache, la manipulation d'images ainsi que l'amélioration des performances sont aussi présentées. L'auteur propose plusieurs mises en application de Phalcon permettant notamment d'exécuter des tâches Phalcon en lignes de commandes ou de créer une API REST.
Pour finir, le dernier chapitre permet au lecteur de passer à la pratique avec un projet de développement de cours en ligne dans lequel l'auteur détaille les différentes étapes de paramétrage de Phalcon pour concevoir à la fois la partie Back-End et la partie Front-End du projet.
Des éléments complémentaires sont en téléchargement sur le site www.editions-eni.fr.
Quizinclus dans
la version en ligne !
Le livre débute avec l'installation et le paramétrage d'un environnement de travail sous Windows ou Linux et avec Docker. Puis, progressivement, l'auteur vous mène vers les grandes étapes de développement d'un projet web avec Phalcon. Création d'un projet, services de Phalcon, gestion de requêtes HTTP, création de formulaires, génération de vues et gestion des différentes pages, interactions avec les bases de données sont autant d'étapes détaillées et illustrées par des cas concrets et des exemples variés.
Puis l'auteur étudie des fonctions avancées de Phalcon comme la gestion des logs, des erreurs, des événements, des droits d'accès et de la sécurité. La gestion du cache, la manipulation d'images ainsi que l'amélioration des performances sont aussi présentées. L'auteur propose plusieurs mises en application de Phalcon permettant notamment d'exécuter des tâches Phalcon en lignes de commandes ou de créer une API REST.
Pour finir, le dernier chapitre permet au lecteur de passer à la pratique avec un projet de développement de cours en ligne dans lequel l'auteur détaille les différentes étapes de paramétrage de Phalcon pour concevoir à la fois la partie Back-End et la partie Front-End du projet.
Des éléments complémentaires sont en téléchargement sur le site www.editions-eni.fr.
Quizinclus dans
la version en ligne !
- Testez vos connaissances à l'issue de chaque chapitre
- Validez vos acquis
Table des matières
Avant-propos
- 1. Au commencement
- 2. Les raisons d'être de ce livre
- 3. Le public visé
- 4. Le contenu du livre
- 5. Remerciements
Présentation de Phalcon
- 1. Introduction
- 2. Historique du framework
- 3. Caractéristiques techniques de Phalcon
- 4. Versions de Phalcon
- 5. Pourquoi choisir Phalcon ?
Installation
- 1. Présentation des éléments à installer
- 1.1 Serveur web
- 1.2 Langage PHP
- 1.3 Choix de la version de Phalcon
- 1.4 Gestionnaire de dépendances PHP
- 1.5 Moteur de base de données
- 2. Configuration sous Windows
- 2.1 Installation d'Apache 2
- 2.2 Installation de PHP
- 2.3 Compilation depuis les sources
- 2.4 Ajout de l'extension
- 2.5 Installation de Composer
- 2.6 Installation de PostgreSQL
- 2.7 Installation de DBeaver
- 3. Configuration sous Ubuntu
- 3.1 Installation d'Apache 2
- 3.2 Installation de PHP
- 3.3 Compilation depuis les sources de Phalcon
- 3.4 Ajout de l'extension
- 3.5 Installation de Composer
- 3.6 Installation de PostgreSQL
- 3.7 Installation de DBeaver
- 4. Docker
- 4.1 Création d'un fichier Dockerfile
- 4.2 Création d'un fichier docker-compose.yml
- 5. Initialisation d’une base de données PostgreSQL
- 5.1 Connexion à une base de données
- 5.2 Import d’un schéma avec des données
- 6. Nouveautés de la version 4
- 7. Migration vers la version 4
- 7.1 Configuration sous Windows
- 7.1.1 Mise à jour de Phalcon
- 7.1.2 Téléchargement et installation de l'extension psr
- 7.1 Configuration sous Windows
- 7.2 Configuration sous Ubuntu
- 7.2.1 Téléchargement, compilation et installation de l'extension psr
- 7.2.2 Mise à jour de Phalcon
- 7.3 Docker
- 7.3.1 Modification du Dockerfile
- 7.3.2 Modification du docker-compose
Création d'un premier projet
- 1. Initialisation avec Phalcon DevTools
- 2. Installation avec Composer
- 3. Création du projet
- 3.1 Exploration du Hello World
- 3.1.1 Présentation des fichiers à la racine du projet
- 3.1.2 Présentation des répertoires à la racine
- 3.1 Exploration du Hello World
- 4.1 Configuration
- 4.1.1 Utilisation des constantes de base
- 4.1.2 Configuration d'une base de données
- 4.1.3 Intégration des répertoires clés d'un projet Phalcon
- 4.1.4 Ajout de données complémentaires
- 4.2.1 Description du fichier de base
- 4.2.2 Gestion par défaut des liens
- 4.2.3 Définition d'URL
- 4.2.4 Gestion des paramètres d'URL
- 4.3.1 Récupération de paramètres provenant du router.php
- 4.4.1 Création d'une classe Modèle
- 4.4.2 Description du modèle généré
- 4.4.3 Récupération de données
- 4.5.1 Passage des données à la vue
- 4.5.2 Affichage des données dans une vue
- 4.6.1 Présentation
- 4.6.2 Import des fichiers
- 4.6.3 Intégration des fichiers de la zone publique dans une vue
- 5.1 Installation de Xdebug
- 5.1.1 Installation sous Windows
- 5.1.2 Installation sous Linux
- 5.1.3 Installation sous Docker
- 5.1.4 Vérification d'installation de l'extension
- 5.1.5 Installation de l'extension pour navigateur
- 5.2.1 Paramétrage de Xdebug
- 5.2.2 Intégration du code de Phalcon
- 6.1 Fonction handle
- 6.1.1 Changement dans l'objet Application
- 6.1.2 Changement dans l'objet router
- 6.4.1 La fonction find
- 6.4.2 La fonction getSource
- 7.1 Phalcon DevTools
- 7.1.1 Mise à jour classique
- 7.1.2 Autre méthode d'installation
- 7.3.1 Modification du point d'entrée
- 7.3.2 Modification du fichier de routage
Services de Phalcon
- 1. Injection de dépendances (DI)
- 1.1 Une dépendance simple
- 1.1.1 Explication
- 1.1.2 Mise en œuvre d'un service avec une simple instanciation
- 1.1.3 Mise en œuvre d'un service avec une fonction anonyme
- 1.1 Une dépendance simple
- 1.2 Une dépendance partagée
- 1.2.1 Explication
- 1.2.2 Mise en œuvre
- 1.2.3 Liste des dépendances de Phalcon
- 2.1 Ajout du dossier dans la configuration
- 2.2 Chargement du contenu d'un répertoire
- 2.3 Ajout d'un espace de noms pour un répertoire
- 3.1 Les collections
- 3.1.1 Construction d'une collection
- 3.1.2 Récupérer le nombre d'éléments d'une collection/tableau
- 3.1.3 Réutilisation d'une collection
- 3.1.4 Récupération d'un élément
- 3.1.5 Vérification de la présence d'un élément
- 3.1.6 Modification d'un élément
- 3.1.7 Ajout d'un élément
- 3.1.8 Suppression d'un élément
- 3.1.9 Parcours d'une collection
- 3.1.10 Sérialisation d'une collection
- 3.1.11 Désérialisation d'une collection
- 3.1.12 Transformation en un tableau standard
- 3.1.13 Transformation en JSON
- 3.4.1 Récupération de la première valeur
- 3.4.2 Récupération de la première valeur en suivant une fonction
- 3.4.3 Récupération de la première clé
- 3.4.4 Récupération de la première clé en suivant une fonction
- 3.4.5 Récupération de la dernière valeur
- 3.4.6 Récupération de la dernière valeur en suivant une fonction
- 3.4.7 Récupération de la dernière clé
- 3.4.8 Récupération de la dernière clé en suivant une fonction
- 3.4.9 Récupération d'un élément
- 3.4.10 Ajout d'un élément
- 3.4.11 Modification d'un élément
- 3.4.12 Vérification de la présence d'une clé
- 3.4.13 Groupement de données
- 3.4.14 Groupement de données en suivant une fonction
- 3.4.15 Groupement de données avec une liste d'objets
- 3.4.16 Trier un tableau
- 3.4.17 Trier un tableau en précisant le sens
- 3.4.18 Vérification de l'unicité des valeurs d'un tableau
- 3.4.19 Récupération des valeurs d'une clé spécifique
- 3.4.20 Suppression d'un niveau de profondeur dans un tableau
- 3.4.21 Mise à plat d'un tableau
- 3.4.22 Séparation d'un tableau en tronçon
- 3.4.23 Extraction d'une partie d'un tableau
- 3.4.24 Séparation des clés et des valeurs d'un tableau
- 3.4.25 Transformation en objet
- 3.4.26 Validation des données
- 3.4.27 Validation partielle d'un tableau
- 3.4.28 Filtrage des données avec une liste d'inclusion
- 3.5.1 Récupération du nom du fichier à partir d'un chemin
- 3.6.1 Vérification de la présence d'un chiffre dans un intervalle donné
- 3.7.1 Transformation d'une chaîne de caractères en CamelCase (Casse de chameau)
- 3.7.2 Transformation d'une chaîne de caractères en SnakeCase
- 3.7.3 Remplacement d'espaces par des tirets du bas
- 3.7.4 Concaténation de chaînes de caractères
- 3.7.5 Compter le nombre de voyelles
- 3.7.6 Transformation de la première lettre en minuscule
- 3.7.7 Incrémentation d'un nombre dans une chaîne de caractères
- 3.7.8 Décrémentation d'un nombre dans une chaîne de caractères
- 3.7.9 Génération d'une structure de dossier à partir d'un nom de fichier
- 3.7.10 Contrôle et mise à jour du chemin d'un répertoire
- 3.7.11 Génération de chaînes aléatoires
- 3.7.12 Génération de caractères aléatoires
- 3.7.13 Vérification des caractères présents au début d'une chaîne
- 3.7.14 Vérification des caractères présents à la fin d'une chaîne
- 3.7.15 Vérification de la présence d'un mot ou d'une expression dans une chaîne
- 3.7.16 Vérification de la présence de majuscules sur l'ensemble de la chaîne
- 3.7.17 Vérification de la présence de minuscules sur l'ensemble de la chaîne
- 3.7.18 Vérification du fait que deux chaînes de caractères sont des anagrammes
- 3.7.19 Vérification du fait qu'une chaîne de caractères est un palindrome
- 3.7.20 Récupération de la première occurrence d'une chaîne comprise entre deux délimiteurs
- 3.7.21 Rendre plus lisible une chaîne de caractères
- 3.7.22 Transformation d'une chaîne de caractères en minuscules
- 3.7.23 Transformation d'une chaîne de caractères en majuscules
- 3.7.24 Suppression de slashs en trop
Gestion de requête HTTP
- 1. Récupération des données d'une requête
- 1.1 Méthode GET
- 1.2 Méthode POST
- 1.2.1 Envoi de données avec un formulaire
- 1.2.2 Analyse de la requête émise
- 1.2.3 Récupération des données émises en POST
- 1.2.4 Nettoyage des données avec des filtres
- 1.2.5 Récupération de fichiers
- 2.1 Présentation
- 2.2 Usage
- 2.2.1 Ajout du service de cryptage
- 2.2.2 Création et envoi d’un cookie
- 2.2.3 Vérification de la présence d’un cookie
- 2.2.4 Récupération d’un cookie
- 2.2.5 Suppression d’un cookie
- 2.2.6 Désactivation du cryptage des cookies
- 3.1 Présentation
- 3.2 Usage
- 3.2.1 Gestion des sessions avec un moteur tiers
- 3.2.2 Enregistrement d’information en session
- 3.2.3 Vérification de la présence d’une propriété en session
- 3.2.4 Récupération d’information en session
- 3.2.5 Suppression d’un élément en session
- 3.2.6 Suppression de tous les éléments en session
- 3.2.7 Séparation des sessions par application
- 4.1 Envoi d’une réponse simple
- 4.2 Envoi d’une réponse avec un contenu JSON
- 4.3 Envoi d’une réponse d’un type particulier
- 4.4 Modification de l’en-tête de la requête HTTP
- 4.5 Gestion du cache sur les requêtes HTTP
- 4.5.1 Utilisation d’identifiant par donnée envoyée
- 4.5.2 Expiration temporelle du cache
- 4.5.3 Expiration du cache en précisant une date
- 4.6.1 Redirection sur une URL interne
- 4.6.2 Redirection sur le nom d’une route
- 4.6.3 Redirection sur une URL externe
- 5.1 Changement dans la gestion des filtres
- 5.1.1 Changement dans le code de Phalcon
- 5.1.2 Utilisation des filtres avec la version 4
- 5.1.3 Changement dans les types de filtres
- 5.2.1 Changement dans les classes de session
- 5.2.2 Création d’un service de session en version 4
- 6.1 Les filtres
- 6.2 Les sessions
- 6.3 Les cookies
Mise en place de formulaires
- 1. Présentation
- 2. Élaboration d'un formulaire
- 2.1 Création du répertoire contenant les formulaires
- 2.2 Contenu basique d'un formulaire
- 3. Présentation de la classe mère Element
- 3.1 Attributs communs à tous les éléments
- 3.2 Initialisation d'un élément
- 3.3 Mise en place d'une valeur par défaut
- 3.4 Création d'un libellé
- 3.5 Modification des attributs
- 4. Gestion des types de champs d'un formulaire
- 4.1 Types basiques
- 4.1.1 Texte
- 4.1.2 Mot de passe
- 4.1.3 Liste déroulante simple
- 4.1.4 Liste déroulante à valeur multiple
- 4.1.5 Case unique à choisir
- 4.1.6 Case à cocher multiple
- 4.1.7 Zone de texte
- 4.1.8 Champ caché
- 4.1.9 Fichier
- 4.1.10 Date
- 4.1.11 Numérique
- 4.1.12 Bouton de soumission de formulaire
- 4.1 Types basiques
- 4.2 Création de types personnalisés
- 4.2.1 Création d'une nouvelle classe
- 4.2.2 Ajout de paramètre à l'initialisation du champ
- 4.2.3 Création du rendu de l'élément HTML
- 4.2.4 Utilisation du nouveau champ dans un formulaire
- 5.1 Fonctionnement
- 5.2 Usage des validateurs existants
- 5.2.1 Alphanumérique
- 5.2.2 Alphabétique
- 5.2.3 Intervalle de valeur
- 5.2.4 Validateur personnalisé
- 5.2.5 Confirmation de valeur
- 5.2.6 Numéro de carte de paiement
- 5.2.7 Date
- 5.2.8 Numérique
- 5.2.9 E-mail
- 5.2.10 Exclusion de valeur
- 5.2.11 Fichier
- 5.2.12 Valeur identique
- 5.2.13 Inclusion de valeur
- 5.2.14 Valide numériquement
- 5.2.15 Non nulle
- 5.2.16 Expression régulière
- 5.2.17 Nombre de caractères
- 5.2.18 Valeur unique
- 5.2.19 URL
- 6.1 Ajout d'un élément au formulaire
- 6.2 Passage et intégration des champs dans la vue
- 6.2.1 Instanciation du formulaire
- 6.2.2 Passage des données à la vue
- 6.2.3 Affichage des champs dans une vue
- 6.3.1 Utilisation d'une entité
- 6.3.2 Utilisation d'une classe d'entité
- 6.3.3 Passage de données diverses
- 6.6.1 Nouvelle entrée
- 6.6.2 Mise à jour d'une entrée
- 7.1 Utilisation de file and code templates
- 7.1.1 Création de modèles de fichiers dans PHPStorm
- 7.1.2 Utilisation du modèle de fichiers avec PHPStorm
- 7.2.1 Les live templates disponibles dans PHPStorm
- 7.2.2 Association d'un modèle de code à un type de fichier/contexte
- 7.2.3 Utilisation d'un modèle de code
- 7.2.4 Création d'un modèle de code
- 8.1 Changement dans la création d’éléments personnalisés
- 8.1.1 Changement de classe
- 8.1.2 Ajout de PSR
- 9.1 Changement de nom de la classe Element
- 9.2 Typage de la fonction rendue
Création de vues HTML
- 1. Présentation générale des vues
- 2. Hiérarchisation des vues
- 3. Volt ou PHTML ?
- 4. Utilisation de PHTML
- 4.1 Affichage des variables
- 4.2 Utilisation générale de PHTML
- 5. Utilisation de Volt
- 5.1 Gestion des commentaires
- 5.2 Gestion des variables
- 5.2.1 Affichage de variables simples
- 5.2.2 Création et initialisation des variables
- 5.2.3 Expressions mathématiques
- 5.2.4 Expression globale
- 5.3 Utilisations de conditions
- 5.3.1 Structure de condition Si (If)
- 5.3.2 Conditions préconstruites par Phalcon
- 5.3.3 Structure de condition ternaire
- 5.3.4 Structure selon le cas (Switch case)
- 5.3.5 Opérateurs de comparaison et logiques
- 5.4 Gestion des tableaux et objets
- 5.4.1 Parcours de tableaux
- 5.4.2 Mot-clé loop
- 5.4.3 Conditions dans les tableaux
- 5.5 Fonctions de base de Volt
- 5.5.1 Fonctions pour des nombres
- 5.5.2 Fonctions pour des chaînes de caractères
- 5.5.3 Fonctions pour des tableaux
- 5.5.4 Fonctions pour tout type de variable
- 6.1 Intégration de ressources lien par lien
- 6.1.1 Au niveau d’une action d’une page
- 6.1.2 Au niveau d’un contrôleur
- 6.1.3 Au niveau du contrôleur principal
- 6.1.4 Intégration en PHTML
- 6.1.5 Intégration en Volt
- 6.2.1 Création dans le contrôleur principal
- 6.2.2 Intégration dans les vues
- 6.2.3 Minification des ressources
- 7.1 Changement dans la gestion de fichier JavaScript et CSS
- 8.1 Suppression des filtres
Gestion avancée des vues
- 1. Création de fonctions utilisables dans les vues
- 1.1 Ajout de fonctions provenant de PHP
- 1.2 Ajout d’une fonction personnalisée
- 2. Création de filtres utilisables dans les vues
- 2.1 Ajout de filtre provenant d’une fonction PHP
- 2.2 Ajout d’un filtre personnalisé
- 3. Utilisation des tags HTML
- 3.1 Génération du Doctype
- 3.1.1 Écriture dans la vue
- 3.1 Génération du Doctype
- 3.2 Génération du titre (title)
- 3.2.1 Écriture dans la vue
- 3.3 Déclaration de style CSS
- 3.3.1 Écriture dans la vue
- 3.4 Déclaration de script JavaScript
- 3.4.1 Écriture dans la vue
- 3.5 Génération d’image
- 3.5.1 Écriture dans la vue
- 3.6 Génération de lien hypertexte
- 3.6.1 Écriture dans la vue
- 3.7 Génération de formulaire
- 3.7.1 Écriture dans la vue
- 3.8 Génération de champs de texte
- 3.8.1 Écriture dans la vue
- 3.9 Génération de mots de passe
- 3.9.1 Écriture dans la vue
- 3.10 Génération de champs cachés
- 3.10.1 Écriture dans la vue
- 3.11 Génération de zones de texte
- 3.11.1 Écriture dans la vue
- 3.12 Génération de listes déroulantes statiques
- 3.12.1 Écriture dans la vue
- 3.13 Génération de listes déroulantes dynamiques
- 3.13.1 Écriture dans la vue
- 3.14 Génération d’un bouton soumission de formulaire
- 3.14.1 Écriture dans la vue
- 4.1 Génération de code HTML avec des paramètres
- 4.2 Génération de code HTML avec des paramètres nommés
- 4.3 Création de macro avec des paramètres par défaut
- 4.4 Retour de données avec une macro
- 5.1 Installation
- 5.1.1 Pour Windows
- 5.1.2 Pour Linux
- 5.1.3 Extension PHP
- 5.1.4 Pour Docker
- 5.2.1 Téléchargement et installation de Poedit
- 5.2.2 Ajout de l'extracteur Volt
- 5.2.3 Création du dictionnaire de traduction pour le projet
- 5.2.4 Paramétrage du projet
- 5.2.5 Indication des fichiers sources à analyser
- 5.2.6 Ajout des mots-clés de reconnaissance de traduction
- 5.2.7 Mise à jour et traduction de texte
- 5.5.1 Traduction simple
- 5.5.2 Traduction avec variable
- 6.1 Gestion des modèles
- 6.2 Inclusion de vues multiples
- 6.3 Gestion des layouts par extends
- 7.1 Désactivation de certains niveaux de vues
- 7.2 Désactivation de la génération de vue
- 8.1 Changement dans les tags
- 8.1.1 L’affichage du title HTML
- 8.1.2 La liste déroulante dynamique
- 8.3.1 Création d'un lien hypertexte
- 8.3.2 Création d'un lien hypertexte brut
- 8.3.3 Création d'un bouton
- 8.3.4 Création d'une image
- 8.3.5 Création d'une zone de texte
- 8.3.6 Création de balise de fin
- 8.3.7 Création d'un formulaire
- 8.3.8 Création du corps (body)
- 8.3.9 Création d'un libellé (label)
- 8.3.10 Création d'un champ générique
- 8.3.11 Création d'un champ générique brut
- 8.3.12 L'usine à éléments HTML
- 8.3.13 Création d'un fil d'Ariane
- 9.1 Modification des tags
- 9.1.1 L’affichage du title HTML
- 9.1.2 L’affichage de liste déroulante dynamique
Bases de données - Les modèles Phalcon
- 1. Préambule : connexion aux différents types de bases de données gérés
- 1.1 Modification de la configuration
- 1.2 Modification du service de connexion à la base de données
- 1.3 Ajout d'options complémentaires au service de base de données
- 2. Gestion des modèles
- 2.1 Création de modèles
- 2.1.1 Avec Phalcon DevTools
- 2.1.2 Manuellement
- 2.1 Création de modèles
- 2.2 Récupération simple des données
- 2.2.1 Liste des éléments d'une table
- 2.2.2 Récupération de la première ligne
- 2.2.3 Récupération de la dernière ligne
- 2.3 Sélection de colonnes
- 2.4 Conditions
- 2.4.1 Simple
- 2.4.2 Personnalisée
- 2.4.3 Avec typage des valeurs
- 2.5 Limitation du nombre de lignes
- 2.6 Saut de ligne
- 2.7 Tri des données
- 2.8 Groupement de données
- 2.9 Récupération du nombre de lignes
- 2.10 Gestion du curseur
- 2.10.1 Accès à la position courante du curseur
- 2.10.2 Déplacement du curseur
- 2.11 Différents formats de résultats
- 2.11.1 Changement du format de résultat après la requête
- 2.11.2 Changement du format de résultat par requête
- 2.12 Opérations mathématiques sur les tables
- 2.13 Insertion de lignes
- 2.13.1 Méthode classique
- 2.13.2 Sauvegarde par tableau
- 2.13.3 Sauvegarde par formulaire
- 2.13.4 Forçage d'insertion d'une ligne
- 2.13.5 Gestion d'erreur à la sauvegarde
- 2.14 Mise à jour d'une ligne
- 2.14.1 Méthode classique
- 2.14.2 Forçage de la mise à jour d'une valeur
- 2.15 Suppression d'une ligne
- 2.16 Validation des données
- 2.16.1 Ajout de validateurs
- 2.16.2 Modification des messages d'erreurs
- 2.17 Pagination des résultats
- 2.18 Mise en place de relations entre les tables
- 2.18.1 Relation 1 à 1 (1-1)
- 2.18.2 Relation 1 à plusieurs (1-N)
- 2.18.3 Relation plusieurs à 1 (N-1)
- 2.18.4 Relation plusieurs à plusieurs (N-N)
- 2.18.5 Accès à une table grâce aux relations
- 2.18.6 Utilisation d'alias pour des requêtes récurrentes
- 2.18.7 Message d'erreur sur les clés étrangères
- 2.19 Conservation des changements d'un objet du modèle (Snapshots)
- 2.19.1 Initialisation du système de conservation des changements
- 2.19.2 Les fonctions associées aux Snapshots
- 2.20 Mise en place d'un préfixe sur toutes les tables
- 2.21 Connexion à différentes bases de données
- 2.21.1 Ajout de nouvelles bases de données
- 2.21.2 Connexion d'une table à une base de données
- 2.21.3 Gestion lecture/écriture par table
- 2.22 Mise en place d'un comportement spécifique
- 2.22.1 Gestion du temps
- 2.22.2 Gestion des suppressions
- 2.23 Mise en cache des résultats d'une requête
- 2.23.1 Mise en place du cache
- 2.23.2 Mise en cache simple d'une requête
- 2.23.3 Mise en cache d'une requête avec un temps d'expiration
- 2.23.4 Mise en cache d'une requête sur un service différent
- 2.24 Gestion des événements du modèle
- 2.24.1 Liste des événements existants associés au modèle
- 2.24.2 Intégration et utilisation des événements dans une classe
- 3.1 Changement dans les classes d’interactions avec la base de données
- 3.2 Changement dans l’assignation des valeurs
- 3.3 Ajout du PSR
- 3.4 Changement dans le système de pagination
- 4.1 Modification des modes de récupération de données
- 4.2 Modification dans l’assignation des valeurs
- 4.2.1 Ajout/modification de ligne
- 4.2.2 Ajout/modification de ligne en spécifiant les colonnes
- 4.2.3 Création d’une nouvelle ligne
Bases de données - Utilisation de PHQL
- 1. PHQL - Phalcon Query Language
- 2. Récupération de données
- 2.1 Requête simple
- 2.2 Utilisation de mots-clés réservés
- 3. Requêtes avec paramètres
- 3.1 Empêchement de l'intégration d'un paramètre sans contrôle
- 3.2 Construction d'une requête avec des paramètres simples
- 3.3 Construction d'une requête avec des paramètres typés
- 4. Mise en cache des requêtes PHQL
- 5. Constructeur de requête
- 5.1 Récupération de plusieurs lignes d'une table
- 5.2 Récupération d'une ligne
- 5.3 Limitation du nombre de résultats
- 5.4 Limitations et sauts de lignes
- 5.5 Jointure naturelle entre deux tables
- 5.6 Sélection de colonnes
- 5.7 Mise en place d'alias sur les tables
- 5.8 Jointure manuelle
- 5.9 Conditions
- 5.9.1 Condition simple
- 5.9.2 Combinaison de conditions avec l'opérateur ET
- 5.9.3 Combinaison de conditions avec l'opérateur OU
- 5.9.4 Conditionnement d'une colonne dans un intervalle de valeurs
- 5.9.5 Conditionnement d'une colonne avec une liste de valeurs inclusive
- 5.9.6 Conditionnement d'une colonne avec une liste de valeurs exclusive
- 5.10 Groupement de données
- 5.10.1 Sans condition
- 5.10.2 Avec une condition
- 5.11 Passage de paramètres dans la fonction d'exécution de requête
- 6.1 Changement sur la sélection des colonnes du QueryBuilder
- 7.1 Modification sur la sélection des colonnes de QueryBuilder
- 7.2 Modification dans le système de cache
Bases de données - Abstraction Layer
- 1. Manipulation directe de la base de données
- 1.1 Récupération de données - de ligne à ligne
- 1.1.1 Lancement d'une requête
- 1.1.2 Récupération du nombre de lignes retournées
- 1.1.3 Lecture ligne à ligne
- 1.1 Récupération de données - de ligne à ligne
- 1.2 Récupération de données - toutes les lignes
- 1.2.1 Fonctionnement basique
- 1.2.2 Les différents modes de récupération
- 1.2.3 Spécification du mode de récupération des données
- 1.2.4 Paramétrage du mode de récupération par défaut
- 1.3 Récupération de la première ligne
- 1.4 Passage de paramètres
- 1.4.1 Construction d'une simple requête
- 1.4.2 Construction d'une requête préparée
- 1.5 Ajout/Modification/Suppression des données
- 1.5.1 Par requête SQL
- 1.5.2 Avec une fonction simple
- 1.5.3 Avec un dictionnaire de données
- 1.6 Gestion des événements
- 1.6.1 Liste des événements disponibles
- 1.6.2 Mise en place d'une classe d'événements
- 1.7 Gestion des transactions
- 2.1 Description du schéma
- 2.1.1 Liste des tables d'un schéma
- 2.1.2 Vérification de l'existence d'une table
- 2.1.3 Description des colonnes d'une table
- 2.1.4 Récupération des index d'une table
- 2.1.5 Récupération des clés étrangères d'une table
- 2.1.6 Récupération des vues d'un schéma
- 2.1.7 Vérification de l'existence d'une vue
- 2.2.1 Création de colonnes
- 2.2.2 Création d'index
- 2.2.3 Création de clés étrangères
- 2.2.4 Création d'une table
- 2.2.5 Ajout d'une colonne à une table
- 2.2.6 Suppression d'une colonne
- 2.2.7 Suppression d'une table
- 3.1 Modification des constantes de PDO
- 3.2 Modification de la classe d'événement
- 3.3 Modification du système de log
Gestion des logs et des erreurs
- 1. Gestion des logs
- 1.1 Création du service de log
- 1.2 Les différents stockages de logs disponibles
- 1.2.1 Log classique par fichier
- 1.2.2 Log par flux pour Docker
- 1.2.3 Log système
- 1.3 Adaptation du formatage des logs
- 1.3.1 Formatage par ligne
- 1.3.2 Formatage JSON
- 1.3.3 Formatage Syslog
- 1.4 Gestion du niveau de logs
- 1.5 Création d'un log
- 1.5.1 Fonctionnement
- 1.5.2 Liste des fonctions utilisables
- 2.1 Surcharge du service Dispatcher
- 2.2 Gestion de la classe ExceptionPlugin
- 2.2.1 Création de la classe ExceptionPlugin
- 2.2.2 Surcharge de l'évènement
- 2.3.1 Erreur 404
- 2.3.2 Erreur 500
- 3.1 Changement dans la gestion des logs
- 3.1.1 Les adaptateurs
- 3.1.2 La nouvelle de classe Logger
- 3.1.3 Le niveau de log
- 3.1.4 Le formatage
- 4.1 Modification dans la création d'un service de logs
- 4.1.1 Modification de l'adaptateur
- 4.1.2 Création d'un Logger
- 4.1.3 Modification du niveau de log
- 4.1.4 Modification du formatage
Gestion des événements
- 1. Présentation
- 2. Liste des événements de Phalcon
- 3. Mise en place
- 3.1 Assignation d'une classe de gestion d'événements
- 3.1.1 Création de la classe
- 3.1.2 Création d'une fonction d'événement
- 3.1.3 Intégration du gestionnaire d'événements dans le service
- 3.1 Assignation d'une classe de gestion d'événements
- 3.2 Attribution d'une fonction anonyme par événement
- 3.3 Attribution d'une fonction anonyme pour tous les événements
- 5.1 Changement dans les classes de gestion d'événements
- 6.1 Modification dans les classes de gestion d'événements
Gestion des droits d’accès (ACL)
- 1. Présentation
- 1.1 Les cas traditionnels
- 1.2 Le service ACL (Access Control Lists) de Phalcon
- 1.2.1 Fonctionnement de base
- 1.2.2 Technologie
- 2.1 Création de l'objet de gestion des droits
- 2.1.1 Création de la fonction dans SecurityPlugin
- 2.1.2 Instanciation de la classe ACL
- 2.1.3 Définition de la stratégie par défaut
- 2.2.1 Création d'un rôle
- 2.2.2 Ajout du rôle à la stratégie de droits
- 2.2.3 Structure de rôle
- 2.3.1 Création d'une ressource
- 2.3.2 Ajout de la ressource à la stratégie de droits
- 2.3.3 Structure de ressource
- 2.6.1 Session
- 2.6.2 Sérialisation
- 3.1 Existence d'un rôle
- 3.2 Existence d'une ressource
- 3.3 Vérification de l'accès
- 3.3.1 Usage
- 3.3.2 Intégration
- 3.3.3 Fonction de vérification avancée
- 3.4.1 En ajoutant un nouveau rôle
- 3.4.2 En liant deux rôles déjà créés
- 3.5.1 Avant la vérification de l'accès
- 3.5.2 Après vérification de l'accès
- 3.5.3 Logs après une opération de contrôle d'accès
- 4.1 Changement dans les constantes
- 5.1 Modification des constantes
- 5.2 Modification de nom de la classe Resource
- 5.2.1 Définition des objets
- 5.2.2 Modification des fonctions
Gestion de la sécurité
- 1. Cryptage/décryptage de données
- 1.1 Installation de l'extension
- 1.2 Usage de la cryptographie
- 1.2.1 Avec les valeurs par défaut
- 1.2.2 Cryptage/décryptage en base64
- 1.2.3 En choisissant un cipher
- 1.2.4 Spécification de la clé et du cipher dans les services
- 1.2.5 Signature d'une donnée cryptée
- 2.1 Hachage simple
- 2.2 Vérification d'une donnée hachée
- 2.3 Cas pratique
- 2.4 Accroissement de la sécurité du hachage
- 3.1 Présentation de l'attaque
- 3.2 Principe du CRSF
- 3.3 Mise en place
- 4.1 Génération d'un nombre aléatoire
- 4.2 Génération d'un UUID
- 4.3 Génération d'une valeur binaire
- 4.4 Génération d'une valeur hexadécimale
- 4.5 Génération d'une valeur en base 58
- 4.6 Génération d'une valeur en base 62
- 4.7 Génération d'une valeur en base 64
- 4.8 Génération d'une valeur en base 64 pour une URL
Gestion du cache
- 1. Présentation
- 2. Configuration
- 2.1 Les adaptateurs Front-End proposés par Phalcon
- 2.2 Les adaptateurs Back-End proposés par Phalcon
- 3. Usage
- 3.1 Utilisation basique du cache
- 3.2 Utilisation du cache avec un temps d'expiration défini
- 3.3 Liste des clés de cache disponibles
- 3.4 Recherche de clés de cache
- 3.5 Vérification de l'existence d'une clé en cache
- 3.6 Suppression du cache d'une clé en particulier
- 4. Nouveautés de la version 4
- 4.1 Mise en conformité avec la PSR-16
- 4.2 Changement dans les classes
- 4.2.1 Classes ajoutées
- 4.2.2 Classes renommées
- 4.2.3 Classes supprimées
- 4.3 Changement dans la création d'un service de cache
- 4.4 Changement dans les fonctions
- 4.4.1 Fonction modifiée
- 4.4.2 Fonction supprimée
- 5.1 Modification de classes
- 5.2 Modification de la création du service
- 5.3 Modification dans les fonctions
- 5.3.1 La fonction queryKeys
- 5.3.2 La fonction save
- 5.3.3 La fonction get
- 5.3.4 La fonction exists
Manipulation d’image
- 1. Présentation
- 2. Installation
- 3. Utilisation
- 3.1 Chargement d'une image
- 3.2 Accès aux données de l'image
- 3.2.1 Le fichier
- 3.2.2 Le MIME (type)
- 3.2.3 Le chemin de l'image
- 3.2.4 Le type détecté par la librairie
- 3.2.5 La largeur
- 3.2.6 La hauteur
- 3.3 Sauvegarde d'une image
- 3.4 Conversion d'image
- 3.5 Réduction de qualité
- 3.6 Redimensionnement
- 3.6.1 En largeur
- 3.6.2 En hauteur
- 3.6.3 En hauteur/largeur avec la proportion la plus petite
- 3.6.4 En hauteur/largeur avec la proportion la plus grande
- 3.6.5 En hauteur/largeur sans proportion
- 3.7 Rognage d'image
- 3.8 Rotation d'image
- 3.9 Retournement d'image
- 3.9.1 Vertical
- 3.9.2 Horizontal
- 3.10 Ajout d'un filigrane
- 3.11 Floutage d'une image
- 3.12 Ajout d'un reflet sur l'image
- 3.13 Pixelisation d'une image
- 3.14 Ajout de texte sur une image
- 3.15 Création d'une image
- 4.1 Ajout d'une classe de constantes
- 5.1 Modification de la classe des constantes
Amélioration des performances
- 1. Ajout du profileur
- 1.1 SQL
- 1.2 PHP
- 1.2.1 Mise en place d'une solution de profilage
- 1.2.2 Analyse du fichier avec PHPStorm
- 2.1 Présentation
- 2.1.1 Les tâches longues
- 2.1.2 Les tâches planifiées
- 2.2.1 Présentation de la structure d'un projet CLI
- 2.2.2 Présentation d'une classe de tâches
- 2.2.3 Lancement de la tâche par défaut
- 2.2.4 Lancement d'une tâche spécifique
- 2.2.5 Passage de paramètres
- 3.1 Changement dans le mode Cli de Phalcon
- 3.1.1 Passage de paramètre
- 4.1 Modification dans le mode Cli de Phalcon
- 4.1.1 Modification du passage de paramètre
Architecture de projet
- 1. Présentation
- 2. Gestion d'un projet Micro
- 2.1 Présentation
- 2.2 Création d'un projet Micro
- 2.3 Présentation de la structure d'un projet Micro
- 2.4 Gestion des routes
- 2.4.1 Définition d'une route
- 2.4.2 Passage de la variable $app
- 2.4.3 Passage de paramètres sans contrôle
- 2.4.4 Passage de paramètres avec contrôle
- 2.4.5 Les différentes méthodes HTTP
- 2.5 Gestion des contrôleurs
- 2.5.1 Création d'un contrôleur
- 2.5.2 Intégration de la collection dans l'application
- 2.5.3 Chargement optimisé d'une collection
- 2.5.4 Redirection
- 2.6 Gestion des vues
- 2.6.1 Spécification de la vue à utiliser
- 2.6.2 Passage de paramètres
- 2.6.3 Génération d'une URL
- 2.7 Gestion des réponses
- 2.7.1 Réponse JSON
- 2.7.2 Réponse typée
- 2.8 Gestion des événements avec une fonction anonyme
- 2.9 Gestion des événements avec un Middleware
- 2.9.1 Présentation
- 2.9.2 Mise en place de la structure
- 2.9.3 Création d'un Middleware simple
- 2.9.4 Création d'un Middleware avec surcharge d'événement existant
- 2.9.5 Intégration d'un Middleware dans l'application
- 3.1 Gestion des événements
- 3.1.1 Création de SecurityMiddleware
- 3.1.2 Contrôler l'accès à l'API
- 3.1.3 CORS - Cross-Origin resource sharing
- 3.1.4 Vérification des données reçues par l'API
- 3.1.5 Page introuvable
- 3.1.6 Architecture complète de SecurityMiddleware
- 3.1.7 Intégration de SecurityMiddleware dans l'application
- 3.2.1 Présentation
- 3.2.2 Mise en place
- 3.2.3 Les exceptions générales de Phalcon
- 3.3.1 Création de ReponseMiddleware
- 3.3.2 Intégration de ReponseMiddleware
- 3.4.1 Récupération de données
- 3.4.2 Ajout d'un nouvel élément en base de données
- 3.4.3 Modification d'un élément en base de données
- 3.4.4 Suppression d'un élément en base de données
- 3.5.1 Création de requête
- 3.5.2 Test avec PHPStorm
- 3.6.1 Installation d'ApiDoc
- 3.6.2 Commentaire dans le code PHP
- 3.6.3 Fichier de configuration pour ApiDoc
- 3.6.4 Génération de la documentation
- 3.6.5 Affichage de la documentation depuis l'index de l'API
- 3.6.6 Démonstration de la documentation
- 4.1 Gestion des événements
- 4.1.1 Création de SecurityPlugin
- 4.1.2 Création de ReponsePlugin
- 4.1.3 Intégration des événements dans le dispatcher
- 4.3.1 Paramètre d'URL
- 4.3.2 Données de la requête
- 5.1 Changement dans les projets Micro
- 5.1.1 Changement dans la fonction handle
- 6.1 Modification dans les projets Micro
- 6.1.1 Ajout d'un paramètre dans la fonction handle
Projet de cours en ligne
- 1. Présentation du projet
- 1.1 Description du projet
- 1.2 Architectures possibles
- 1.2.1 Premier cas : API et interface utilisateurs distincts
- 1.2.2 Deuxième cas : application en un seul bloc
- 3.1 Gestion des répertoires
- 3.2 Structure de la base de données
- 3.2.1 Description des colonnes des tables
- 3.2.2 Script SQL de création de table et d'initialisation des données
- 3.3.1 Dockerfile
- 3.3.2 Docker-compose
- 4.1 Suppression des vues
- 4.2 Présentation
- 4.3 Résultat attendu
- 4.4 Solution possible
- 4.4.1 Création de la route
- 4.4.2 Création de l'action santé
- 4.4.3 Création automatique d'une réponse JSON
- 5.1 Présentation de la librairie de requête
- 5.1.1 Téléchargement de Guzzle dans le projet
- 5.1.2 Intégration du vendor dans le projet
- 5.2.1 Création d'un Client HTTP
- 5.2.2 Lancement d'une requête API
- 5.2.3 Récupération des données de la réponse HTTP
- 6.1 Création de la classe ClientApi
- 6.2 Création du constructeur de ClientApi
- 6.3 Création d'une méthode d'envoi de requête HTTP
- 6.3.1 Méthodologie
- 6.3.2 Mise en place
- 7.1 Création d'un service API
- 7.2 Utilisation du nouveau service api
- 7.3 Intégration de la configuration Phalcon
- 7.3.1 Modification du fichier de configuration
- 7.3.2 Modification du fichier de service
- 8.1 Interaction simple
- 8.1.1 Présentation du processus
- 8.1.2 Connexion à la base de données côté API
- 8.1.3 Création de l'espace de noms pour les modèles de l'API
- 8.1.4 Création des modèles Utilisateurs et Cours dans l'API
- 8.1.5 Création d'une route API de connexion
- 8.1.6 Création d'une fonction API pour une connexion simple
- 8.1.7 Envoi d'une requête de connexion du Web à l'API
- 8.2.1 Présentation du processus
- 8.2.2 Création et intégration du répertoire forms
- 8.2.3 Création du formulaire web
- 8.2.4 Intégration simple du formulaire dans le contrôleur
- 8.2.5 Intégration des champs du formulaire dans une vue
- 8.2.6 Validation du formulaire
- 8.2.7 Utilisation des identifiants de connexion
- 8.2.8 Stockage en session et redirection de l'enseignant connecté
- 8.3.1 Présentation du processus
- 8.3.2 Création de la classe SecurityPlugin dans l'API
- 8.3.3 Importation d'une librairie de gestion de jetons dans l'API
- 8.3.4 Création d'un générateur de jetons utilisateurs dans l'API
- 8.3.5 Génération d'un jeton API à la connexion d'un utilisateur
- 8.3.6 Stockage du jeton en session du Web
- 8.3.7 Envoi automatique du jeton par le Web
- 8.3.8 Récupération des données présentes dans le jeton de l'API
- 8.3.9 Création d'une route API pour récupérer les cours d'un enseignant
- 8.3.10 Récupération des cours d'un enseignant connecté avec le Web
- 9.1 Présentation du processus
- 9.2 Création du service API
- 9.3 Utilisation du nouveau service
Auteur
Jérémy PASTOURETEn savoir plus
Lead-developer, Jérémy PASTOURET met à profit toute son expertise sur le framework Phalcon dans le développement de deux grands projets mis en production avec Kubernetes, DreamAudit et Circulariz, auxquels il participe depuis plus de 5 ans en mode agile. En parallèle, il a à coeur de partager régulièrement ses découvertes et ses astuces de développeur sur son site les-enovateurs.com et fait partie des contributeurs de Phalcon ayant contribué à la version 4. L'écriture de ce livre est pour lui l'occasion de prolonger cette expérience en proposant au lecteur un livre réellement efficace sur le développement d'applications web avec Phalcon.
Caractéristiques
- Niveau Expert à Confirmé
- Nombre de pages 850 pages
- Parution janvier 2020
- Livre (broché) - 17 x 21 cm
- ISBN : 978-2-409-02274-6
- EAN : 9782409022746
- Ref. ENI : EPPHALC
- Niveau Expert
- Parution janvier 2020
- HTML
- ISBN : 978-2-409-02275-3
- EAN : 9782409022753
- Ref. ENI : LNEPPHALC
Téléchargements
- Des fichiers complémentaires (53,8 Mo)