Avant-propos 1. À qui s adresse ce livre? 13 2. Comment cet ouvrage est-il structuré? 15 Premiers pas avec Zend 1. Objectif 19 2. Quoi de neuf chez Zend? 20 2.1 Zend Framework 2 20 2.2 Les nouveaux composants de Zend Framework 2 21 2.3 Packaging 22 2.4 Zend Framework est maintenant sur GitHub 22 2.5 Une nouvelle approche Mobile First pour Zend Studio 23 3. Installer Zend Server 23 3.1 Présentation 23 3.2 Installation 24 3.3 Configuration du fuseau horaire 36 4. Configurer Zend Server pour le déploiement d'applications 37 5. Installer Composer 39 5.1 Présentation 39 5.2 Installation 40 6. Installer Git 44 6.1 Présentation 44 6.2 Installation de Git pour Windows 44 6.3 Créer une paire de clés SSH privée/publique 50 1/13
7. Installer Zend Studio 51 7.1 Présentation 51 7.2 Installation 52 8. Créer une première application mobile avec Zend Studio 58 9. Comprendre la structure d'un projet d'api RESTful 65 9.1 Vue d'ensemble 65 9.2 Le répertoire public 65 9.2.1 Le fichier.htaccess 65 9.2.2 Le fichier index.php 66 9.3 Le répertoire config 67 9.3.1 Le fichier application.config.php 67 9.3.2 Le fichier gateway.global.php 68 9.3.3 Le fichier gateway.xml 68 9.4 Le répertoire src 69 9.4.1 Le fichier RestCustomerController.php 70 9.4.2 Le fichier CustomerRepository.php 72 9.5 Le répertoire data 74 9.6 Le répertoire scripts 75 9.7 Le répertoire vendor 75 9.8 Le fichier deployment.xml 75 9.9 Installer Zend Framework 2 avec Composer 78 9.10 Autoloading des classes avec Composer 80 9.11 Déployer le projet d'api RESTful 82 9.12 Tester le projet d'api RESTful 83 10. Comprendre la structure d'un projet d'application mobile 85 10.1 Vue d'ensemble 85 10.2 Le fichier mobile.appgui 85 10.3 Le fichier index.html 86 10.4 Le répertoire js 88 10.5 Le répertoire style 88 10.6 Le fichier config.xml 88 2/13
10.7 Tester le projet d'application mobile 89 11. Rester attentif à l'utilisateur avec le design UX 90 12. Conclusion 91 Architecture orientée par le domaine 1. Objectif 95 2. Comprendre les stratégies de modélisation du modèle de domaine 96 2.1 Pattern et antipattern 96 2.2 Antipattern : le modèle de domaine anémique 96 2.3 Le pattern Domain Model 97 3. L'approche DDD et le langage ubiquitaire 98 4. Architecture orientée par le domaine 99 4.1 Vue d'ensemble 99 4.2 La couche de domaine 100 4.3 La couche de persistance des données 101 4.4 La couche d'api web 101 5. Valider les données 102 5.1 Position du problème 102 5.2 Quand valider les données? 102 5.3 Où valider les données? 102 5.4 Comment valider les données? 102 6. Implémenter le squelette de l'application mobile de gestion des tâches 103 7. Mettre en pratique le pattern Domain Model 107 3/13
7.1 Diagramme de classes 107 7.2 Définition des agrégats 108 8. Mettre en pratique le pattern Value Object 110 8.1 Objectif 110 8.2 Implémentation de la classe abstraite ValueObject 110 8.3 Implémentation de la classe Period 111 8.4 Implémentation de la classe Credential 113 8.5 Implémentation de la classe Keys 115 9. Mettre en pratique le pattern Entity 117 9.1 Objectif 117 9.2 Implémentation de la classe abstraite Entity 117 9.3 Implémentation de l'entité Comment 120 10. Mettre en pratique le pattern Aggregate 122 10.1 Objectif 122 10.2 Implémentation de l'agrégat User 122 10.3 Implémentation de l'agrégat Category 126 10.4 Implémentation de l'agrégat Task 129 11. Mettre en pratique la validation des données 136 11.1 Objectif 136 11.2 Création de l'interface ValidatableObjectInterface 136 11.3 Les composants Zend\InputFilter et Zend\Validator 137 11.4 Implémentation de la validation sur l'agrégat Task 140 11.5 Implémentation de la validation sur l'agrégat Category 148 11.6 Implémentation de la validation sur l'agrégat User 153 12. Comprendre la notion de contrat d'interface 158 12.1 Objectif 158 12.2 Implémentation de l'interface CategoryRepositoryInterface 159 12.3 Implémentation de l'interface TaskRepositoryInterface 160 12.4 Implémentation de l'interface UserRepositoryInterface 161 4/13
13. Bonnes pratiques pour un modèle de domaine robuste 163 13.1 Les frameworks de tests unitaires pour PHP 163 13.2 Le Test Driven Development 163 13.3 Préparation du projet pour les tests unitaires 165 13.4 Tests unitaires sur l'entité Category 172 13.5 Tests unitaires sur l'objet-valeur Period 177 13.6 Tests unitaires sur l'agrégat Task 179 14. Conclusion 186 Persistance des données 1. Objectif 189 2. La révolution du NoSQL 190 3. Initiation à MongoDB 191 3.1 Généralités 191 3.2 Structure d'un document 191 3.3 Document embarqué 192 3.4 Références 192 3.5 Bonne pratique : document embarqué ou référence? 194 3.6 Requêtage des données 194 4. Installer MongoDB 195 4.1 Installation de base 195 4.2 Installation comme service Windows 201 5. Construire des requêtes dans MongoDB 206 5.1 Insertion de données 206 5.2 Sélection de données 207 5.3 Sélecteur de requête 207 5/13
5.4 Mise à jour de données 210 5.5 Suppression de données 211 6. Activer l'extension PHP pour MongoDB 211 7. Stratégies d'accès aux bases de données NoSQL 216 7.1 Vue d'ensemble 216 7.2 Présentation de Doctrine 217 7.3 Installation de Doctrine MongoDB ODM Module 217 8. Modéliser la structure des données persistantes 226 8.1 Structure des données d'un utilisateur 226 8.2 Structure des données d'une catégorie 227 8.3 Structure des données d'une tâche 228 9. Mapper les entités du domaine avec Doctrine 229 9.1 Principe du mapping 229 9.2 Mapping de l'entité de base Entity 229 9.3 Mapping de l'entité Comment 232 9.4 Mapping de l'objet-valeur Period 233 9.5 Mapping de l'objet-valeur Credential 235 9.6 Mapping de l'objet-valeur Keys 236 9.7 Mapping de l'agrégat User 237 9.8 Mapping de l'agrégat Category 238 9.9 Mapping de l'agrégat Task 241 10. Accéder aux données avec le pattern Repository 246 10.1 Principe du motif de conception Repository 246 10.2 Création de la classe CategoryRepository 247 10.3 Création de la classe TaskRepository 249 10.4 Création de la classe UserRepository 251 10.5 Tests unitaires 253 11. Conclusion 253 6/13
Créer des services web RESTful avec Zend Studio 1. Objectif 257 2. Principe des API RESTful 258 3. Principe des API RPC 259 4. Le composant Zend Server Gateway 260 4.1 Vue d'ensemble 260 5. Gérer les codes de retour HTTP 262 6. Injection de dépendances 263 6.1 Principe 263 6.2 Injection de dépendances avec le composant Zend\ServiceManager 264 6.3 Mise en pratique de l'injection de dépendances 265 7. Implémenter l'api de manipulation des utilisateurs 267 7.1 Création du contrôleur de gestion des utilisateurs 267 7.2 Enregistrer l'utilisateur 270 7.3 Authentifier l'utilisateur 271 7.4 Résumé 274 8. Implémenter l'api de manipulation des catégories 276 8.1 Création du contrôleur d'api de gestion des catégories 276 8.2 Ajouter une nouvelle catégorie 279 8.3 Mettre à jour une catégorie 281 8.4 Lister les catégories 282 8.5 Sélectionner une catégorie 283 8.6 Supprimer une catégorie 285 8.7 Résumé 286 7/13
9. Implémenter l'api de manipulation des commentaires 292 9.1 Création du contrôleur d'api de gestion des commentaires 292 9.2 Ajouter un commentaire 296 9.3 Mettre à jour un commentaire 298 9.4 Lister les commentaires 300 9.5 Sélectionner un commentaire 301 9.6 Supprimer un commentaire 303 9.7 Résumé 304 10. Implémenter l'api de manipulation des tâches 312 10.1 Création du contrôleur d'api de gestion des tâches 312 10.2 Ajouter une nouvelle tâche 316 10.3 Mettre à jour une tâche 318 10.4 Lister les tâches 319 10.5 Sélectionner une tâche 320 10.6 Supprimer une tâche 322 10.7 Résumé 323 11. Sécuriser une API RESTful 330 11.1 Authentification des API 330 11.2 Implémenter l'authentification 330 11.3 Désactiver l authentification de l API de gestion des utilisateurs 334 12. Conclusion 335 Démarrer avec jquery Mobile 1. Objectif 339 2. Introduction à jquery Mobile 339 2.1 Anatomie d'une page avec jquery Mobile 340 2.2 Utilisation des balises sémantiques HTML5 343 8/13
2.3 Le composant Dialog 344 2.4 Les templates multipages 346 2.5 Le composant Navbar 348 2.6 Le composant Button 350 2.7 Le composant Listview 353 2.8 Les éléments de formulaire 355 2.9 Les thèmes 361 3. Comprendre le principe du Responsive Web Design 363 4. Les composants au rendu adaptatif dans jquery Mobile 363 4.1 Présentation 363 4.2 Le composant Table en mode Reflow 364 4.3 Le composant Table et le mode Column Toggle 367 5. Développer des templates côté client avec Underscore 369 5.1 Principe du templating 369 6. Mise en pratique du templating avec Underscore 372 6.1 Objectif 372 6.2 Préparation du dossier des templates 373 6.3 Implémentation du template de listage des catégories 373 6.4 Implémentation du template de création d'une catégorie 374 6.5 Implémentation du template d'édition d'une catégorie 375 6.6 Implémentation du template de vue de détail d'une catégorie 375 6.7 Implémentation du template de listage des tâches 376 6.8 Implémentation du template de création d'une tâche 377 6.9 Implémentation du template d'édition d'une tâche 378 6.10 Implémentation du template de vue de détail d'une tâche 379 6.11 Implémentation du template de création d un commentaire 380 6.12 Implémentation du template d'édition d'un commentaire 380 7. Résumé 381 9/13
JavaScript avancé 1. Architecture SPA avec Backbone.js 385 1.1 Qu'est-ce qu'une SPA? 385 1.2 Présentation de Backbone.js 385 2. Les modèles Backbone 386 2.1 Qu'est-ce qu'un modèle? 386 2.2 Accéder à l'identité d'un modèle 387 2.3 Instancier un modèle 389 2.4 Accéder aux données d'un modèle 389 2.5 Gérer les événements du modèle 391 2.6 Valider les données des modèles 394 3. Les collections Backbone 397 3.1 Qu'est-ce qu'une collection? 397 3.2 Instancier une collection 397 3.3 Manipuler les éléments d'une collection 398 3.4 Trier les éléments d'une collection 399 3.5 Parcourir les éléments d'une collection 401 3.6 Gérer les événements d'une collection 402 4. Les vues Backbone 408 4.1 Qu'est-ce qu'une vue? 408 4.2 La propriété el 408 4.3 Instancier une vue 408 5. Le routeur Backbone 415 5.1 Qu'est-ce qu'un routeur? 415 5.2 Configurer les règles de routage 418 6. Implémenter le squelette d'une application JavaScript 420 7. Interagir avec le serveur 421 10/13
7.1 Principe 421 7.2 Sélectionner les données du modèle 421 7.3 Créer ou mettre à jour un modèle 422 7.4 Supprimer un modèle 423 8. Authentification des applications JavaScript 424 9. Structurer le code JavaScript en modules 424 9.1 Objectif des modules 424 9.2 Comprendre les modules AMD 424 9.3 Présentation de RequireJS 426 10. Modulariser les modèles Backbone 427 10.1 Implémentation du modèle CategoryModel 427 10.2 Implémentation du modèle UserModel 428 10.3 Implémentation du modèle CommentModel 430 10.4 Implémentation du modèle TaskModel 431 11. Modulariser les collections Backbone 432 11.1 Implémentation de la collection CategoriesCollection 432 11.2 Implémentation de la collection UsersCollection 433 11.3 Implémentation du modèle TasksCollection 433 12. Modulariser les vues Backbone 434 12.1 Implémentation de la vue CategoriesListView 434 12.2 Implémentation de la vue CategoryCreateView 435 12.3 Implémentation de la vue CategoryEditView 436 12.4 Implémentation de la vue CategoryDetailView 438 12.5 Implémentation de la vue TasksListView 438 12.6 Implémentation de la vue TaskCreateView 440 12.7 Implémentation de la vue TaskEditView 442 12.8 Implémentation de la vue TaskDetailView 444 12.9 Implémentation de la vue CommentCreateView 446 12.10 Implémentation de la vue CommentEditView 447 11/13
12.11 Implémentation de la vue UserLoginView 449 12.12 Implémentation de la vue UserRegisterView 450 13. Conclusion 452 Développer dans le Cloud pour le Cloud 1. Objectif 455 2. Premier pas avec le Cloud 456 2.1 Origine du Cloud Computing 456 2.2 Le développement basé sur le Cloud 456 3. Installer Zend Server dans le Cloud OpenShift 457 3.1 Présentation d'openshift 457 3.2 Création d'un compte sur OpenShift 457 3.3 Installation de Zend Server pour OpenShift 462 3.4 Configuration de Zend Server 466 4. Installer MongoDB dans le Cloud OpenShift 470 5. Créer une cible de déploiement vers Zend Server pour OpenShift 476 5.1 Création d'un nouveau projet d API depuis Git 480 5.2 Déployer le projet d API sur OpenShift depuis Zend Studio 485 6. Conclusion 487 Index 489 12/13
13/13