Formation PHP avancé <ul><ul><li>Pierre de La Morinerie </li></ul></ul>Junior Isep 2007
Programme de la formation
Programme de la formation <ul><li>PHP Avancé : </li></ul><ul><ul><li>Programmation Orientée Objet </li></ul></ul><ul><ul><...
Programme de la formation <ul><li>Objectifs de la formation : </li></ul><ul><ul><li>Ne plus réécrire sans cesse le même co...
Programme de la formation <ul><li>Un mot sur le déroulement </li></ul><ul><ul><li>Rythme </li></ul></ul><ul><ul><li>Séance...
Introduction à la POO
Introduction à la POO - Généralités <ul><li>Objectifs de la Programation Orienté Objet (POO) : </li></ul><ul><ul><li>Modél...
Introduction à la POO - Généralités <ul><li>Avantages de la POO : </li></ul><ul><ul><li>Code plus sûr </li></ul></ul><ul><...
Introduction à la POO – Classes et objets <ul><li>Qu'est-ce qu'un objet ? </li></ul><ul><ul><li>Un objet est une structure...
Introduction à la POO – Classes et objets <ul><li>Exemple : Un objet « animal » comportera : </li></ul><ul><ul><li>Des att...
Introduction à la POO – Classes et objets <ul><li>Attention au vocabulaire : </li></ul><ul><ul><li>Dire que « Animal » est...
Introduction à la POO – Classes et objets <ul><li>Exemple 1 : créer une classe et des objet en PHP </li></ul>
Introduction à la POO – Le constructeur <ul><li>Le constructeur </li></ul><ul><ul><li>Comment initialiser les valeurs par ...
Introduction à la POO – Le Constructeur <ul><li>Exemple 2 : utilisation du constructeur </li></ul>
Introduction à la POO – Les méthodes <ul><li>Les méthodes </li></ul><ul><ul><li>Ce sont des fonctions pour manipuler les a...
Introduction à la POO – Les méthodes <ul><li>Exemple 3 : utilisation des méthodes </li></ul>
Introduction à la POO – L'héritage <ul><li>L'héritage </li></ul><ul><ul><li>Une classe peut hériter d'une autre </li></ul>...
Introduction à la POO – L'héritage <ul><li>Exemple 4 : héritage de classes </li></ul>
Introduction à la POO - TD <ul><li>TD n°1 : </li></ul><ul><ul><li>Sujet : Modéliser des véhicules </li></ul></ul><ul><ul><...
Introduction à la POO - TP <ul><li>TP n°1 : </li></ul><ul><ul><li>Sujet : Réaliser une classe MySQL </li></ul></ul><ul><ul...
Introduction à la POO - TP <ul><li>TP n°1 : </li></ul><ul><ul><li>Intérêt : </li></ul></ul><ul><ul><ul><li>Utiliser facile...
Les frameworks Le modèle MVC
Les frameworks <ul><li>Définition </li></ul><ul><li>Avantages </li></ul><ul><li>Qualités nécessaires </li></ul><ul><li>Les...
Les frameworks - Définition <ul><li>Un framework est un ensemble de bibliothèques permettant le développement rapide d'app...
Les frameworks - Avantages <ul><li>Avantages d'un framework : </li></ul><ul><ul><li>Cohérence </li></ul></ul><ul><ul><li>L...
Les frameworks – Qualités nécessaires <ul><li>Un framework doit être : </li></ul><ul><ul><li>Pas trop rigide </li></ul></u...
Les frameworks – L'existant <ul><li>PHP : </li></ul><ul><ul><li>Symphony </li></ul></ul><ul><ul><li>Zend Framework </li></...
Les frameworks – L'existant <ul><li>Un framework se choisit en fonction de : </li></ul><ul><ul><li>L'expérience des dévelo...
Les frameworks – Fonctionnalités <ul><li>Que peut-on trouver dans un framework web ? </li></ul><ul><ul><li>Architecture MV...
Le modèle MVC <ul><li>MVC <=> Modèle – Vue - Contrôleur </li></ul><ul><li>Architecture 3-tiers </li></ul><ul><li>Permet de...
Le modèle MVC <ul><li>Modèle : </li></ul><ul><ul><li>Représente le comportement de l'application : traitements des données...
Le modèle MVC <ul><li>Avantages : </li></ul><ul><ul><li>Architecture extrêmement claire </li></ul></ul><ul><ul><li>Paradig...
Le modèle MVC - Exemple <ul><li>Exemple : un Livre d'or </li></ul><ul><ul><li>Modèle : classe Message </li></ul></ul><ul><...
Le modèle MVC - Exemple <ul><li>Exemple : un Livre d'or </li></ul><ul><li>Exemple : un Livre d'or </li></ul><ul><ul><li>Mo...
Introduction à CakePHP
Introduction à CakePHP <ul><li>Origines </li></ul><ul><li>Fonctionnalités </li></ul><ul><li>Pourquoi Cake ? </li></ul><ul>...
Introduction à CakePHP – Origines <ul><li>Initié par Michal Tatarynowicz en 2005 </li></ul><ul><li>Sous licence MIT (Libre...
Introduction à CakePHP – Fonctionnalités <ul><li>Fonctionnalités principales : </li></ul><ul><ul><li>Compatible PHP4 et PH...
Introduction à CakePHP – Pourquoi Cake <ul><li>Ce qui fait de la bonne cuisine : </li></ul><ul><ul><li>Simple et léger </l...
Introduction à CakePHP – Documentation <ul><li>Il faut exploiter la bonne documentation de Cake ! </li></ul><ul><li>Ressou...
CakePHP – Premier tutoriel
Premier tutoriel <ul><li>Rien de tel qu'un bon exemple </li></ul><ul><ul><li>Fameux tutoriel « A weblog in 15 minutes » de...
Premier tutoriel – Prérequis <ul><li>Prérequis : </li></ul><ul><ul><li>Un serveur Web </li></ul></ul><ul><ul><li>Un serveu...
Premier tutoriel – Installation de Cake <ul><li>Installation de Cake : </li></ul><ul><ul><li>Télécharger CakePHP 1.1.* (st...
Premier tutoriel - Test <ul><li>Testons l'installation : </li></ul><ul><ul><li>http://localhost/formation_cake/ </li></ul>...
Premier tutoriel – Configuration <ul><li>Configuration de Cake : </li></ul><ul><ul><li>Aller dans le dossier  /app/config/...
Premier tutoriel – Configuration <ul><li>Optionnel : au sujet de l'URL rewriting </li></ul><ul><ul><li>Ouvrir le  fichier ...
Premier tutoriel – Configuration <ul><li>Vérifions que Cake parvient à se connecter à notre BDD : </li></ul><ul><ul><li>ht...
Premier tutoriel – Configuration <ul><li>CakePHP est configuré : nous pouvons commencer à réaliser notre blog </li></ul>
Premier tutoriel – BDD <ul><li>Création de la Base de Données : </li></ul><ul><ul><li>Ouvrez phpMyAdmin </li></ul></ul><ul...
Premier tutoriel – BDD <ul><li>Cré ation du Modèle </li></ul><ul><li>Création du Contrôleur </li></ul><ul><li>Création de ...
Premier tutoriel – Code <ul><li>Modèle : </li></ul><ul><ul><li>Lié à une table de la BDD </li></ul></ul><ul><ul><li>Par co...
Premier tutoriel – Code <ul><li>Contrôleur : </li></ul><ul><ul><li>Par convention, le fichier et la classe s’appellent du ...
Premier tutoriel – Code <ul><li>Vue : </li></ul><ul><ul><li>Un fichier HTML dans lequel on peut rajouter un peu de PHP </l...
Premier tutoriel – Code <ul><li>Vue : Helpers </li></ul><ul><ul><li>Petits composants de formatage </li></ul></ul><ul><ul>...
Premier tutoriel – Code <ul><li>Affichage des posts </li></ul><ul><ul><li>Création d'une action 'view' dans notre Contrôle...
Premier tutoriel – Code <ul><li>Ajout d'un Post </li></ul><ul><ul><li>Création d'une action 'add' dans notre Contrôleur </...
Premier tutoriel – Code <ul><li>Ajout d'un Post </li></ul><ul><ul><li>Création de la vue </li></ul></ul><ul><ul><ul><li>Le...
Premier tutoriel – Code <ul><li>Ajout d'un Post - v alidation des données </li></ul><ul><ul><li>De fait au niveau du Modèl...
Premier tutoriel – Code <ul><li>Ajout d'un Post - v alidation des données </li></ul><ul><ul><li>Affichage des messages : <...
Premier tutoriel – Code <ul><li>Suppression d'un Post </li></ul><ul><ul><li>Création de l'action dans le Contrôleur : </li...
Premier tutoriel – Code <ul><li>Edition d'un Post </li></ul><ul><ul><li>Création de l'action du Contrôleur </li></ul></ul>...
Premier tutoriel – Code <ul><li>Edition des routes </li></ul><ul><ul><li>Fichier  app/config/routes.php </li></ul></ul><ul...
Premier tutoriel – Fin <ul><li>Un mot sur l'extensibilité </li></ul><ul><ul><li>App_controller : actions communes à tous l...
Premier tutoriel – Conclusion <ul><li>Fin du tutoriel </li></ul><ul><li>Pour aller plus loin : </li></ul><ul><ul><li>Lisez...
Aller plus vite : Le scaffolding
Scaffolding - présentation <ul><li>Emploi : </li></ul><ul><ul><li>Le scaffolding produit une interface d'administration en...
Scaffolding - utilisation <ul><li>Pour activer le scaffolding dans un Contrôleur : </li></ul><ul><ul><li>Mettre un attribu...
Scaffolding - exemple <ul><li>Ajout de Commentaires à notre blog (1/3) </li></ul><ul><ul><li>Création de la table 'comment...
Scaffolding - exemple <ul><li>Ajout de Commentaires à notre blog (2/3) </li></ul><ul><ul><li>Création du Modèle </li></ul>...
Scaffolding - exemple <ul><li>Ajout de Commentaires à notre blog (3/3) </li></ul><ul><ul><li>Test </li></ul></ul><ul><ul><...
Scaffolding – modification du scaffolding <ul><li>Remplacement des vues du scaffolding </li></ul><ul><ul><li>Créer une ou ...
Scaffolding – modification du scaffolding <ul><li>Remplacement des actions du scaffolding </li></ul><ul><ul><li>On peut cr...
Les associations
Associations <ul><li>Cake peut scaffolder en fonction des associations de table </li></ul><ul><ul><li>Exemple : menu dérou...
Associations <ul><li>Les associations sont définies dans les Modèles </li></ul><ul><li>Les différentes possibilités sont :...
Associations <ul><li>Utilité des associations : </li></ul><ul><ul><li>Récupération automatiques de données </li></ul></ul>...
Associations - exemple <ul><li>Exemple : </li></ul><ul><ul><li>Rajouter l'attribut suivant au modèle ' Comment'  : </li></...
Associations - exemple <ul><li>Exemple 2 : </li></ul><ul><ul><li>Rajouter l'attribut suivant au modèle 'Post '  : </li></u...
Aller (encore) plus vite : Bake.php
Bake.php - présentation <ul><li>Qu'est ce que c'est ? </li></ul><ul><ul><li>Un script à lancer depuis la ligne de commande...
Bake.php - présentation <ul><li>Comparaison bake/scaffolding </li></ul><ul><ul><li>Le scaffolding génère l'affichage dynam...
Bake.php - utilisation <ul><li>Appel de Bake : </li></ul><ul><ul><li>Bake s'appelle depuis la ligne de commande </li></ul>...
Bake.php - utilisation <ul><li>Exemple pratique : </li></ul><ul><ul><li>Ouvrir une invite de commande </li></ul></ul><ul><...
Prochain SlideShare
Chargement dans…5
×

Formation PHP avancé - Cake PHP

41 203 vues

Publié le

Une formation avancée à PHP, aux frameworks, à CakePHP

Publié dans : Technologie
3 commentaires
23 j’aime
Statistiques
Remarques
Aucun téléchargement
Vues
Nombre de vues
41 203
Sur SlideShare
0
Issues des intégrations
0
Intégrations
2 660
Actions
Partages
0
Téléchargements
2 128
Commentaires
3
J’aime
23
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Formation PHP avancé - Cake PHP

  1. 1. Formation PHP avancé <ul><ul><li>Pierre de La Morinerie </li></ul></ul>Junior Isep 2007
  2. 2. Programme de la formation
  3. 3. Programme de la formation <ul><li>PHP Avancé : </li></ul><ul><ul><li>Programmation Orientée Objet </li></ul></ul><ul><ul><li>Couches d'accès aux données </li></ul></ul><ul><li>Frameworks : </li></ul><ul><ul><li>Introduction aux frameworks </li></ul></ul><ul><ul><li>Présentation du modèle MVC </li></ul></ul><ul><li>CakePHP : </li></ul><ul><ul><li>Découverte et utilisation du framework CakePHP </li></ul></ul><ul><ul><li>Utilisation du scaffolding et des tests unitaires </li></ul></ul><ul><li>Pour aller plus loin : </li></ul><ul><ul><li>Introduction à l'eXtreme Programming et aux tests unitaires </li></ul></ul>
  4. 4. Programme de la formation <ul><li>Objectifs de la formation : </li></ul><ul><ul><li>Ne plus réécrire sans cesse le même code </li></ul></ul><ul><ul><li>Se concentrer sur les tâches essentielles </li></ul></ul><ul><ul><li>Pouvoir gérer de gros projets en PHP </li></ul></ul><ul><li>En résumé : </li></ul><ul><ul><li>Programmer mieux et plus rapidement ! </li></ul></ul>
  5. 5. Programme de la formation <ul><li>Un mot sur le déroulement </li></ul><ul><ul><li>Rythme </li></ul></ul><ul><ul><li>Séances </li></ul></ul>
  6. 6. Introduction à la POO
  7. 7. Introduction à la POO - Généralités <ul><li>Objectifs de la Programation Orienté Objet (POO) : </li></ul><ul><ul><li>Modéliser les programmes comme des interactions d'objets </li></ul></ul><ul><li>Concrètement : </li></ul><ul><ul><li>En procédural, on manipule des fonctions </li></ul></ul><ul><ul><li>En POO, on manipule des objets </li></ul></ul>
  8. 8. Introduction à la POO - Généralités <ul><li>Avantages de la POO : </li></ul><ul><ul><li>Code plus sûr </li></ul></ul><ul><ul><li>Programmes sont plus clairs </li></ul></ul><ul><ul><li>Maintenance des applications facilitée </li></ul></ul><ul><ul><li>Le code est facilement réutilisable </li></ul></ul><ul><ul><li>La POO rend possible le développement de gros programme </li></ul></ul><ul><li>Inconvénients de la POO : </li></ul><ul><ul><li>Oblige à réfléchir et à modéliser avant de programmer </li></ul></ul><ul><ul><li>La notation POO n’est pas toujours intuitive </li></ul></ul>
  9. 9. Introduction à la POO – Classes et objets <ul><li>Qu'est-ce qu'un objet ? </li></ul><ul><ul><li>Un objet est une structure de données </li></ul></ul><ul><ul><li>Mais il inclus aussi les fonctions pour traiter ces données </li></ul></ul><ul><li>Un objet va donc comporter : </li></ul><ul><ul><li>Des attributs, ou champs (comme dans une struct ) </li></ul></ul><ul><ul><li>Des méthodes pour manipuler ces attributs </li></ul></ul>
  10. 10. Introduction à la POO – Classes et objets <ul><li>Exemple : Un objet « animal » comportera : </li></ul><ul><ul><li>Des attributs : </li></ul></ul><ul><ul><ul><li>Nom </li></ul></ul></ul><ul><ul><ul><li>Âge </li></ul></ul></ul><ul><ul><ul><li>Taille </li></ul></ul></ul><ul><ul><ul><li>Poids </li></ul></ul></ul><ul><ul><li>Des méthodes : </li></ul></ul><ul><ul><ul><li>Nourrir() </li></ul></ul></ul><ul><ul><ul><li>Soigner() </li></ul></ul></ul>
  11. 11. Introduction à la POO – Classes et objets <ul><li>Attention au vocabulaire : </li></ul><ul><ul><li>Dire que « Animal » est un objet est un abus de langage </li></ul></ul><ul><ul><li>« Animal » n'est qu'un moule pour créer des objets </li></ul></ul><ul><ul><li>À partir du moule « Animal », je peux créer : </li></ul></ul><ul><ul><ul><li>Un objet « gorille », nommé André, de 6 ans </li></ul></ul></ul><ul><ul><ul><li>Un objet « lion », nommé Alex, de 13 ans </li></ul></ul></ul><ul><ul><ul><li>Un objet « tigre », nommé Henri, de 3 ans </li></ul></ul></ul><ul><li>Un moule d'objet est habituellement appelé une classe </li></ul><ul><li>Créer un objet à partir d'une classe s'appelle «  instancier  » </li></ul><ul><li>Ne surtout pas confondre classe (=moule) et objet (=contenu du moule) ! </li></ul>
  12. 12. Introduction à la POO – Classes et objets <ul><li>Exemple 1 : créer une classe et des objet en PHP </li></ul>
  13. 13. Introduction à la POO – Le constructeur <ul><li>Le constructeur </li></ul><ul><ul><li>Comment initialiser les valeurs par défaut d'un objet ? </li></ul></ul><ul><ul><li>Le constructeur est appelé à chaque instanciation d'un objet </li></ul></ul><ul><ul><li>C'est une fonction qui a le même nom que la classe </li></ul></ul><ul><ul><li>On peut y effectuer n'importe quelle opération </li></ul></ul><ul><li>Accès aux attributs </li></ul><ul><ul><li>La variable « $this » permet d'accéder aux attributs de l'objet </li></ul></ul>
  14. 14. Introduction à la POO – Le Constructeur <ul><li>Exemple 2 : utilisation du constructeur </li></ul>
  15. 15. Introduction à la POO – Les méthodes <ul><li>Les méthodes </li></ul><ul><ul><li>Ce sont des fonctions pour manipuler les attributs des objets </li></ul></ul><ul><ul><li>Elles peuvent aussi manipuler d'autre objets </li></ul></ul><ul><ul><li>Les méthodes utilisent « $this » pour accéder aux attributs </li></ul></ul><ul><li>Autres utilisations des méthodes </li></ul><ul><ul><li>Une méthode peut être utilisée comme une fonction classique </li></ul></ul><ul><ul><li>Elle peut prendre des paramètres et renvoyer un résultat </li></ul></ul>
  16. 16. Introduction à la POO – Les méthodes <ul><li>Exemple 3 : utilisation des méthodes </li></ul>
  17. 17. Introduction à la POO – L'héritage <ul><li>L'héritage </li></ul><ul><ul><li>Une classe peut hériter d'une autre </li></ul></ul><ul><ul><li>Elle comporte alors tous les attributs et méthodes de la classe parente </li></ul></ul><ul><li>En pratique : </li></ul><ul><ul><li>On peut définir une classe « Lion » qui hérite de « Animal » </li></ul></ul><ul><ul><li>Un objet de type « Lion » a alors un age, un nom... </li></ul></ul><ul><ul><li>On peut ensuite rajouter des particularités au Lion </li></ul></ul>
  18. 18. Introduction à la POO – L'héritage <ul><li>Exemple 4 : héritage de classes </li></ul>
  19. 19. Introduction à la POO - TD <ul><li>TD n°1 : </li></ul><ul><ul><li>Sujet : Modéliser des véhicules </li></ul></ul><ul><ul><li>Contraintes : </li></ul></ul><ul><ul><ul><li>Il y a deux types de véhicules : auto et bateau </li></ul></ul></ul><ul><ul><ul><li>Tous les véhicules ont une vitesse maximale </li></ul></ul></ul><ul><ul><ul><li>Les autos comportent : </li></ul></ul></ul><ul><ul><ul><ul><li>une distance parcourue </li></ul></ul></ul></ul><ul><ul><ul><ul><li>une fonction « voyager(km) » qui incrémente la distance parcourue </li></ul></ul></ul></ul><ul><ul><ul><li>Les bateaux comportent : </li></ul></ul></ul><ul><ul><ul><ul><li>une longueur (par défaut, la longueur est de 10) </li></ul></ul></ul></ul><ul><ul><li>Exercices : </li></ul></ul><ul><ul><ul><li>1 : modéliser une Auto et un Bateau </li></ul></ul></ul><ul><ul><ul><li>2 : modéliser un Véhicule et deux classes héritées </li></ul></ul></ul>
  20. 20. Introduction à la POO - TP <ul><li>TP n°1 : </li></ul><ul><ul><li>Sujet : Réaliser une classe MySQL </li></ul></ul><ul><ul><li>Contraintes : </li></ul></ul><ul><ul><ul><li>Attribut s host , login , password , db_base , is_connected </li></ul></ul></ul><ul><ul><ul><li>Un constructeur MySQL($host, $login, $password, $db_base) qui stocke les paramètres dans les attributs de la classe </li></ul></ul></ul><ul><ul><ul><li>Une méthode connect() qui connecte à la BDD et met is_connected à true </li></ul></ul></ul><ul><ul><ul><li>Une méthode query($sql) qui lance une requête MySQL et renvoie le résultat (seulement si is_connected est à true ) </li></ul></ul></ul><ul><ul><ul><li>Une méthode disconnect() qui déconnecte de la BDD et met is_connected à false </li></ul></ul></ul>
  21. 21. Introduction à la POO - TP <ul><li>TP n°1 : </li></ul><ul><ul><li>Intérêt : </li></ul></ul><ul><ul><ul><li>Utiliser facilement plusieurs connexions en simultané : un objet MySQL <=> une connexion </li></ul></ul></ul><ul><ul><ul><li>Renvoyer directement des tableaux au lieu de recordsets </li></ul></ul></ul><ul><ul><ul><li>Rajouter des fonctions de log, de traitement des erreurs, de préprocessing, de traitement des données... </li></ul></ul></ul><ul><ul><ul><li>Traiter plusieurs SGDB : Oracle, PostgreSQL, etc </li></ul></ul></ul>
  22. 22. Les frameworks Le modèle MVC
  23. 23. Les frameworks <ul><li>Définition </li></ul><ul><li>Avantages </li></ul><ul><li>Qualités nécessaires </li></ul><ul><li>Les frameworks Web existants </li></ul><ul><li>Fonctionnalités </li></ul>
  24. 24. Les frameworks - Définition <ul><li>Un framework est un ensemble de bibliothèques permettant le développement rapide d'applications </li></ul><ul><li>Il existe des frameworks logiciels et des frameworks Web </li></ul><ul><li>Comporte : </li></ul><ul><ul><li>Une architecture : </li></ul></ul><ul><ul><ul><li>Définit l'organisation des fichiers dans l'application </li></ul></ul></ul><ul><ul><li>Des bibliothèques </li></ul></ul><ul><ul><ul><li>Fournit des composants utiles : RSS, authentification, Ajax, etc </li></ul></ul></ul>
  25. 25. Les frameworks - Avantages <ul><li>Avantages d'un framework : </li></ul><ul><ul><li>Cohérence </li></ul></ul><ul><ul><li>Liberté </li></ul></ul><ul><ul><li>Qualité </li></ul></ul><ul><ul><li>Rapidité </li></ul></ul>
  26. 26. Les frameworks – Qualités nécessaires <ul><li>Un framework doit être : </li></ul><ul><ul><li>Pas trop rigide </li></ul></ul><ul><ul><li>Pas trop flexible </li></ul></ul><ul><ul><li>Permettre l'intégration de composants tierce-partie </li></ul></ul>
  27. 27. Les frameworks – L'existant <ul><li>PHP : </li></ul><ul><ul><li>Symphony </li></ul></ul><ul><ul><li>Zend Framework </li></ul></ul><ul><ul><li>Prado </li></ul></ul><ul><ul><li>CakePHP </li></ul></ul><ul><ul><li>PHP on Trax </li></ul></ul><ul><li>Ruby : </li></ul><ul><ul><li>Ruby on Rails </li></ul></ul><ul><li>Python : </li></ul><ul><ul><li>Django </li></ul></ul><ul><ul><li>Turbogears </li></ul></ul><ul><li>Java : </li></ul><ul><ul><li>J2EE </li></ul></ul>
  28. 28. Les frameworks – L'existant <ul><li>Un framework se choisit en fonction de : </li></ul><ul><ul><li>L'expérience des développeurs </li></ul></ul><ul><ul><li>Les besoins du client (publication, développement...) </li></ul></ul><ul><ul><li>Le support interne (activité de la communauté) </li></ul></ul><ul><ul><li>L'hébergement </li></ul></ul><ul><li>Idéalement, le framework doit être adapté à chaque projet </li></ul><ul><li>En pratique, il est bon de choisir un framework suffisamment flexible et se s'y tenir </li></ul>
  29. 29. Les frameworks – Fonctionnalités <ul><li>Que peut-on trouver dans un framework web ? </li></ul><ul><ul><li>Architecture MVC </li></ul></ul><ul><ul><li>SGDB multiples </li></ul></ul><ul><ul><li>ActiveRecord </li></ul></ul><ul><ul><li>Templates </li></ul></ul><ul><ul><li>Validation </li></ul></ul><ul><ul><li>Cache </li></ul></ul><ul><ul><li>Javascript/Ajax </li></ul></ul><ul><ul><li>Url rewriting </li></ul></ul><ul><ul><li>Modules </li></ul></ul><ul><ul><li>Authentification </li></ul></ul>
  30. 30. Le modèle MVC <ul><li>MVC <=> Modèle – Vue - Contrôleur </li></ul><ul><li>Architecture 3-tiers </li></ul><ul><li>Permet de séparer les données, la logique et la présentation </li></ul>
  31. 31. Le modèle MVC <ul><li>Modèle : </li></ul><ul><ul><li>Représente le comportement de l'application : traitements des données, interactions avec la base de données, etc. </li></ul></ul><ul><li>Vue : </li></ul><ul><ul><li>Correspond à l'interface avec laquelle l'utilisateur interagit. </li></ul></ul><ul><ul><li>Souvent en HTML ou XML </li></ul></ul><ul><ul><li>La vue n'effectue aucun traitement, elle se contente d'afficher l'interfacer et les données fournies par le modèle </li></ul></ul><ul><li>Contrôleur : </li></ul><ul><ul><li>Répond aux événements émis par l'utilisateur </li></ul></ul><ul><ul><li>Contient toute la partie logique du code </li></ul></ul>
  32. 32. Le modèle MVC <ul><li>Avantages : </li></ul><ul><ul><li>Architecture extrêmement claire </li></ul></ul><ul><ul><li>Paradigme utilisé dans de nombreux projets logiciels ou Web </li></ul></ul><ul><ul><li>Permet de séparer la présentation de l'accès aux données </li></ul></ul>
  33. 33. Le modèle MVC - Exemple <ul><li>Exemple : un Livre d'or </li></ul><ul><ul><li>Modèle : classe Message </li></ul></ul><ul><ul><ul><li>Requêtes SQL </li></ul></ul></ul><ul><ul><ul><li>Méthode de récupération des données : tousLesMessages(), messagesRécents(), etc </li></ul></ul></ul><ul><ul><li>Contrôleur : classe ControleurMessages </li></ul></ul><ul><ul><ul><li>Analyse de GET et POST pour déterminer les données demandées </li></ul></ul></ul><ul><ul><ul><li>Récupération des messages appropriés </li></ul></ul></ul><ul><ul><ul><li>Pagination </li></ul></ul></ul><ul><ul><ul><li>Appel de la Vue correspondante </li></ul></ul></ul><ul><ul><li>Vue : template VueMessages </li></ul></ul><ul><ul><ul><li>Fichier PHP comprenant de l'HTML et quelques variables </li></ul></ul></ul><ul><ul><ul><li>Boucle sur les données du contrôleur pour afficher la liste des messages </li></ul></ul></ul>
  34. 34. Le modèle MVC - Exemple <ul><li>Exemple : un Livre d'or </li></ul><ul><li>Exemple : un Livre d'or </li></ul><ul><ul><li>Modèle : classe Message </li></ul></ul><ul><ul><ul><ul><li>Requêtes SQL </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Méthode de récupération des données : tousLesMessages(), messagesRécents(), etc </li></ul></ul></ul></ul><ul><ul><li>Vue : template VueMessages </li></ul></ul><ul><ul><ul><ul><li>Fichier PHP comprenant de l'HTML et quelques variables </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Boucle sur les données du contrôleur pour afficher la liste des messages </li></ul></ul></ul></ul><ul><ul><li>Contrôleur : classe ControleurMessages </li></ul></ul><ul><ul><ul><ul><li>Analyse de GET et POST pour déterminer les données demandées </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Récupération des messages appropriés </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Pagination </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Appel de la Vue correspondante </li></ul></ul></ul></ul>
  35. 35. Introduction à CakePHP
  36. 36. Introduction à CakePHP <ul><li>Origines </li></ul><ul><li>Fonctionnalités </li></ul><ul><li>Pourquoi Cake ? </li></ul><ul><li>Documentation </li></ul>
  37. 37. Introduction à CakePHP – Origines <ul><li>Initié par Michal Tatarynowicz en 2005 </li></ul><ul><li>Sous licence MIT (Libre, open-source, non contaminante) </li></ul><ul><li>Inspiré de Ruby on Rails : </li></ul><ul><ul><li>« Des conventions plutôt que de la configuration » </li></ul></ul><ul><ul><li>Modèle MVC </li></ul></ul><ul><ul><li>Scaffolding </li></ul></ul>
  38. 38. Introduction à CakePHP – Fonctionnalités <ul><li>Fonctionnalités principales : </li></ul><ul><ul><li>Compatible PHP4 et PHP5 </li></ul></ul><ul><ul><li>Génération de CRUD et de requêtes usuelles </li></ul></ul><ul><ul><li>Url rewriting </li></ul></ul><ul><ul><li>Templates rapides (pur PHP) et helpers </li></ul></ul><ul><ul><li>Facile à déployer </li></ul></ul><ul><ul><li>Validation des données </li></ul></ul><ul><ul><li>Scaffolding (=échafaudage) </li></ul></ul><ul><ul><li>Cache des vues et/ou des requêtes </li></ul></ul><ul><ul><li>SGBD multiples </li></ul></ul>
  39. 39. Introduction à CakePHP – Pourquoi Cake <ul><li>Ce qui fait de la bonne cuisine : </li></ul><ul><ul><li>Simple et léger </li></ul></ul><ul><ul><li>Facile à apprendre </li></ul></ul><ul><ul><li>Demeure du PHP </li></ul></ul><ul><ul><li>Facilement extensible </li></ul></ul><ul><ul><li>Bien documenté </li></ul></ul><ul><ul><li>Communauté active et sympathique </li></ul></ul><ul><li>En bref... </li></ul><ul><ul><li>Coder avec Cake est agréable </li></ul></ul>
  40. 40. Introduction à CakePHP – Documentation <ul><li>Il faut exploiter la bonne documentation de Cake ! </li></ul><ul><li>Ressources utiles : </li></ul><ul><ul><li>www.cakephp.com – site officiel </li></ul></ul><ul><ul><li>manual.cakephp.com - le manuel complet de Cake </li></ul></ul><ul><ul><li>bakery.cakephp.org – articles, tutoriaux et exemples </li></ul></ul><ul><ul><li>cakephp.org/files/cakesheet.pdf – mémento général </li></ul></ul>
  41. 41. CakePHP – Premier tutoriel
  42. 42. Premier tutoriel <ul><li>Rien de tel qu'un bon exemple </li></ul><ul><ul><li>Fameux tutoriel « A weblog in 15 minutes » de Ruby on Rails </li></ul></ul><ul><ul><li>Cake peut réaliser cela en bien moins ! </li></ul></ul>
  43. 43. Premier tutoriel – Prérequis <ul><li>Prérequis : </li></ul><ul><ul><li>Un serveur Web </li></ul></ul><ul><ul><li>Un serveur de base de données </li></ul></ul>
  44. 44. Premier tutoriel – Installation de Cake <ul><li>Installation de Cake : </li></ul><ul><ul><li>Télécharger CakePHP 1.1.* (stable) depuis cakephp.org </li></ul></ul><ul><ul><li>Décompresser l'archive dans un dossier du WebRoot (par exemple « formation_cake ») </li></ul></ul><ul><ul><li>La structure finale doit donner : </li></ul></ul><ul><ul><ul><li>/formation_cake </li></ul></ul></ul><ul><ul><ul><ul><li>/app </li></ul></ul></ul></ul><ul><ul><ul><ul><li>/cake </li></ul></ul></ul></ul><ul><ul><ul><ul><li>/docs </li></ul></ul></ul></ul><ul><ul><ul><ul><li>/vendors </li></ul></ul></ul></ul><ul><ul><ul><ul><li>.htaccess </li></ul></ul></ul></ul><ul><ul><ul><ul><li>index.php </li></ul></ul></ul></ul><ul><ul><ul><ul><li>VERSION.txt </li></ul></ul></ul></ul>
  45. 45. Premier tutoriel - Test <ul><li>Testons l'installation : </li></ul><ul><ul><li>http://localhost/formation_cake/ </li></ul></ul>
  46. 46. Premier tutoriel – Configuration <ul><li>Configuration de Cake : </li></ul><ul><ul><li>Aller dans le dossier /app/config/ </li></ul></ul><ul><ul><li>Renommer «  database.php.default  » en «  database.php  » </li></ul></ul><ul><ul><li>Ouvrir database.php et éditer les informations de connexion : </li></ul></ul><ul><ul><ul><li>var $default = array('driver' => 'mysql', 'connect' => 'mysql_connect', 'host' => 'localhost', 'login' => 'root', 'password' => '', 'database' => 'easyphp' 'prefix' => 'cake_' ); </li></ul></ul></ul>
  47. 47. Premier tutoriel – Configuration <ul><li>Optionnel : au sujet de l'URL rewriting </li></ul><ul><ul><li>Ouvrir le fichier de configuration d'Apache (httpd.conf) </li></ul></ul><ul><ul><li>Décommenter les lignes : </li></ul></ul><ul><ul><ul><li>LoadModule rewrite_module modules/mod_rewrite.so </li></ul></ul></ul><ul><ul><ul><li>AddModule mod_rewrite.c </li></ul></ul></ul><ul><li>Si on ne veut/peut pas utiliser mod_rewrite : </li></ul><ul><ul><li>Ouvrir le fichier /app/config/core.php </li></ul></ul><ul><ul><li>Décommenter la ligne : </li></ul></ul><ul><ul><ul><li>define ('BASE_URL', env('SCRIPT_NAME')); </li></ul></ul></ul>
  48. 48. Premier tutoriel – Configuration <ul><li>Vérifions que Cake parvient à se connecter à notre BDD : </li></ul><ul><ul><li>http://localhost/formation_cake/ </li></ul></ul>
  49. 49. Premier tutoriel – Configuration <ul><li>CakePHP est configuré : nous pouvons commencer à réaliser notre blog </li></ul>
  50. 50. Premier tutoriel – BDD <ul><li>Création de la Base de Données : </li></ul><ul><ul><li>Ouvrez phpMyAdmin </li></ul></ul><ul><ul><li>Créez une table « cake_posts » : </li></ul></ul><ul><ul><ul><li>CREATE TABLE posts ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, title VARCHAR(50), body TEXT, created DATETIME DEFAULT NULL, modified DATETIME DEFAULT NULL ); </li></ul></ul></ul><ul><li>Insérez quelques posts dans la table </li></ul>
  51. 51. Premier tutoriel – BDD <ul><li>Cré ation du Modèle </li></ul><ul><li>Création du Contrôleur </li></ul><ul><li>Création de la Vue </li></ul>
  52. 52. Premier tutoriel – Code <ul><li>Modèle : </li></ul><ul><ul><li>Lié à une table de la BDD </li></ul></ul><ul><ul><li>Par convention, le fichier et la classe s’appellent du nom de la table, au singulier : </li></ul></ul><ul><ul><li>Fichier : post.php </li></ul></ul><ul><ul><li>Classe : Post </li></ul></ul><ul><li>La classe hérite de Model , qui définit des fonctions par défaut </li></ul><ul><li>L’attribut name n’est pas strictement obligatoire, mais permet de résoudre quelques bizarreries de PHP4. Il doit comporter le nom du modèle. </li></ul>
  53. 53. Premier tutoriel – Code <ul><li>Contrôleur : </li></ul><ul><ul><li>Par convention, le fichier et la classe s’appellent du nom de la table, au pluriel : </li></ul></ul><ul><ul><ul><li>Fichier : posts_controller.php </li></ul></ul></ul><ul><ul><ul><li>Classe : PostsController </li></ul></ul></ul><ul><ul><li>Les fonctions du contrôleur sont appelées par : </li></ul></ul><ul><ul><ul><li>/controlleur/action </li></ul></ul></ul><ul><ul><ul><li>'index()' est l'action par défaut </li></ul></ul></ul><ul><ul><ul><li>Exemple : /posts/index </li></ul></ul></ul><ul><ul><li>La méthode set() passe des données à la Vue </li></ul></ul><ul><ul><li>La méthode du modèle findAll() récupère tous les enregistrements du modèle, et renvoie un tableau </li></ul></ul>
  54. 54. Premier tutoriel – Code <ul><li>Vue : </li></ul><ul><ul><li>Un fichier HTML dans lequel on peut rajouter un peu de PHP </li></ul></ul><ul><ul><li>Nom du fichier : app/views/model_name/action_name.thtml </li></ul></ul><ul><ul><li>Exemple : </li></ul></ul><ul><ul><ul><li>app/views/posts/index.thtml </li></ul></ul></ul><ul><li>On peut maintenant tester en allant à l’Url : </li></ul><ul><ul><li>/posts/index </li></ul></ul>
  55. 55. Premier tutoriel – Code <ul><li>Vue : Helpers </li></ul><ul><ul><li>Petits composants de formatage </li></ul></ul><ul><ul><li>Utilisés dans les Vues </li></ul></ul><ul><ul><li>Permettent de formatter du HTML, des formulaires, du Javascript, des dates, du texte… </li></ul></ul><ul><ul><li>Documentés dans le Manuel </li></ul></ul><ul><li>HtmlHelper : </li></ul><ul><ul><li>Contient une méthode url() , qui prend transforme une Url absolue en Url relative : </li></ul></ul><ul><ul><ul><li>/controlleur/action => localhost/formation_cake/controlleur/action </li></ul></ul></ul>
  56. 56. Premier tutoriel – Code <ul><li>Affichage des posts </li></ul><ul><ul><li>Création d'une action 'view' dans notre Contrôleur </li></ul></ul><ul><ul><ul><li>Une action peut prendre des paramètres </li></ul></ul></ul><ul><ul><ul><li>Il seront passés dans l'Url de la page </li></ul></ul></ul><ul><ul><ul><li>Exemple : </li></ul></ul></ul><ul><ul><ul><ul><li>function view($id) => /posts/view/2 </li></ul></ul></ul></ul><ul><ul><li>Création de la vue 'view.thtml' </li></ul></ul>
  57. 57. Premier tutoriel – Code <ul><li>Ajout d'un Post </li></ul><ul><ul><li>Création d'une action 'add' dans notre Contrôleur </li></ul></ul><ul><ul><ul><li>$this->params contient les paramètres passés en $_POST </li></ul></ul></ul><ul><ul><ul><li>$this->data est un raccourci pour $this->params['data'] </li></ul></ul></ul><ul><ul><li>Model->save() sauvegarde des données </li></ul></ul><ul><ul><ul><li>Format : ['Model']['field'] = value </li></ul></ul></ul><ul><ul><li>Flash() affiche un message et une redirection </li></ul></ul>
  58. 58. Premier tutoriel – Code <ul><li>Ajout d'un Post </li></ul><ul><ul><li>Création de la vue </li></ul></ul><ul><ul><ul><li>Les Helpers 'Html' et 'Form' sont très utiles </li></ul></ul></ul><ul><ul><ul><li>Mais on peut aussi écrire le code en pur Html </li></ul></ul></ul><ul><ul><li>Helpers de champs </li></ul></ul><ul><ul><ul><li>1er argument : 'Model/field' : génère un name=''data[Model][field]'' </li></ul></ul></ul><ul><ul><ul><li>2ème argument : tableau d'options Html </li></ul></ul></ul>
  59. 59. Premier tutoriel – Code <ul><li>Ajout d'un Post - v alidation des données </li></ul><ul><ul><li>De fait au niveau du Modèle </li></ul></ul><ul><ul><li>Attribut $validate : </li></ul></ul><ul><ul><ul><li>'field' => VALID_CONSTANT </li></ul></ul></ul><ul><ul><li>Les constantes de validation sont : </li></ul></ul><ul><ul><ul><li>VALID_NOT_EMPTY </li></ul></ul></ul><ul><ul><ul><li>VALID_NUMBER </li></ul></ul></ul><ul><ul><ul><li>VALID_EMAIL </li></ul></ul></ul><ul><ul><ul><li>VALID_YEAR </li></ul></ul></ul><ul><ul><li>On peut définir la fonction Model::invalidate() pour un contrôle plus fin </li></ul></ul>
  60. 60. Premier tutoriel – Code <ul><li>Ajout d'un Post - v alidation des données </li></ul><ul><ul><li>Affichage des messages : </li></ul></ul><ul><ul><ul><li>Fonction $html->setErrorTag('Model/field', 'Message d'erreur') </li></ul></ul></ul><ul><ul><li>La validation de Cake est extensible et finement configurable à tous les niveaux (Modèle, Contrôleur, Vue) </li></ul></ul>
  61. 61. Premier tutoriel – Code <ul><li>Suppression d'un Post </li></ul><ul><ul><li>Création de l'action dans le Contrôleur : </li></ul></ul><ul><ul><ul><li>Model->delete() </li></ul></ul></ul><ul><ul><li>Inutile de créer une vue : on redirige après l'action </li></ul></ul>
  62. 62. Premier tutoriel – Code <ul><li>Edition d'un Post </li></ul><ul><ul><li>Création de l'action du Contrôleur </li></ul></ul><ul><ul><ul><li>Pré-remplir ' $this->data ' permet de préremplir les champs </li></ul></ul></ul><ul><ul><ul><li>On utilise toujours la fonction Model->save() , comme pour un ajout </li></ul></ul></ul><ul><ul><ul><li>Si un champ 'id' est définit dans les données, ' save() ' va essayer de mettre à jour ces données </li></ul></ul></ul><ul><ul><li>Création de la Vue </li></ul></ul><ul><ul><ul><li>Quasiment identique à ' add.thtml' </li></ul></ul></ul><ul><ul><ul><li>On rajoute un champ ' hidden ' nommé ' id ', pour permettre la mise à jour </li></ul></ul></ul><ul><ul><ul><li>Nota : on pourrait combiner ' add.thtml ' et ' edit.thtml ' sans difficultés </li></ul></ul></ul>
  63. 63. Premier tutoriel – Code <ul><li>Edition des routes </li></ul><ul><ul><li>Fichier app/config/routes.php </li></ul></ul><ul><ul><li>Permet d'associer n'importe quelle adresse à n'importe quelle action </li></ul></ul><ul><li>Débogage </li></ul><ul><ul><li>Controllé par la variable de configuration DEBUG (config.php) </li></ul></ul><ul><ul><li>Détermine les messages d'erreurs, les dump SQL, etc </li></ul></ul>
  64. 64. Premier tutoriel – Fin <ul><li>Un mot sur l'extensibilité </li></ul><ul><ul><li>App_controller : actions communes à tous les contrôleurs </li></ul></ul><ul><ul><li>App_model : méthodes communes à tous les modèles </li></ul></ul><ul><ul><li>Components : petits contrôleurs partagés </li></ul></ul><ul><ul><li>Elements : petits bouts de templates réutilisables (thtml) </li></ul></ul><ul><ul><li>Layouts : gabarits généraux (thtml) </li></ul></ul><ul><ul><li>Plugins : ensemble autonome de contrôleurs (ex: un forum) </li></ul></ul>
  65. 65. Premier tutoriel – Conclusion <ul><li>Fin du tutoriel </li></ul><ul><li>Pour aller plus loin : </li></ul><ul><ul><li>Lisez le Manuel en entier ! </li></ul></ul><ul><ul><li>Lisez éventuellement l'API et/ou les sources </li></ul></ul><ul><ul><li>Essayez de rajouter des Commentaires au blog </li></ul></ul>
  66. 66. Aller plus vite : Le scaffolding
  67. 67. Scaffolding - présentation <ul><li>Emploi : </li></ul><ul><ul><li>Le scaffolding produit une interface d'administration en analysant les bases de données </li></ul></ul><ul><ul><li>Les actions sont générées dynamiquement à chaque appel (pas de génération de code) </li></ul></ul><ul><li>Usage : </li></ul><ul><ul><li>Mise en place de structures temporaires </li></ul></ul><ul><ul><li>Développement rapide tant que les schémas ne sont pas fixés </li></ul></ul><ul><li>Limites : </li></ul><ul><ul><li>Ce n'est que de l' échafaudage </li></ul></ul><ul><ul><li>Pas totalement flexible </li></ul></ul><ul><ul><li>Souvent nécessaire d'écrire son propre code </li></ul></ul>
  68. 68. Scaffolding - utilisation <ul><li>Pour activer le scaffolding dans un Contrôleur : </li></ul><ul><ul><li>Mettre un attribut '$scaffold' dans le contrôleur </li></ul></ul><ul><ul><li>C'est tout ! </li></ul></ul><ul><ul><li>Note : il faut tout de même créer un Modèle avant </li></ul></ul>
  69. 69. Scaffolding - exemple <ul><li>Ajout de Commentaires à notre blog (1/3) </li></ul><ul><ul><li>Création de la table 'comments' dans la Base de donnée </li></ul></ul><ul><ul><ul><li>id (INT) </li></ul></ul></ul><ul><ul><ul><li>post_id (INT) </li></ul></ul></ul><ul><ul><ul><li>author (VARCHAR 50) </li></ul></ul></ul><ul><ul><ul><li>body (TEXT) </li></ul></ul></ul><ul><ul><ul><li>created (DATETIME) </li></ul></ul></ul>
  70. 70. Scaffolding - exemple <ul><li>Ajout de Commentaires à notre blog (2/3) </li></ul><ul><ul><li>Création du Modèle </li></ul></ul><ul><ul><li>Création d'un Contrôleur vide </li></ul></ul><ul><ul><ul><li>Attribut '$scaffold' </li></ul></ul></ul>
  71. 71. Scaffolding - exemple <ul><li>Ajout de Commentaires à notre blog (3/3) </li></ul><ul><ul><li>Test </li></ul></ul><ul><ul><ul><li>http://localhost/formation_cake/comments/index </li></ul></ul></ul>
  72. 72. Scaffolding – modification du scaffolding <ul><li>Remplacement des vues du scaffolding </li></ul><ul><ul><li>Créer une ou plusieurs des vues nommées : </li></ul></ul><ul><ul><ul><li>index.scaffold.thtml </li></ul></ul></ul><ul><ul><ul><li>show.scaffold.thtml </li></ul></ul></ul><ul><ul><ul><li>add.scaffold.thtml </li></ul></ul></ul><ul><ul><ul><li>edit.scaffold.thtml </li></ul></ul></ul><ul><ul><li>On peut remplacer les vues scaffoldées pour toute l'application ou juste pour un contrôleur particulier </li></ul></ul><ul><ul><li>Possibilité de s'inspirer des vues scaffoldées de Cake </li></ul></ul><ul><ul><ul><li>/cake/libs/view.templates/scaffolds </li></ul></ul></ul>
  73. 73. Scaffolding – modification du scaffolding <ul><li>Remplacement des actions du scaffolding </li></ul><ul><ul><li>On peut créer des actions nommées : </li></ul></ul><ul><ul><ul><li>index </li></ul></ul></ul><ul><ul><ul><li>show </li></ul></ul></ul><ul><ul><ul><li>add </li></ul></ul></ul><ul><ul><ul><li>edit </li></ul></ul></ul><ul><ul><ul><li>delete </li></ul></ul></ul><ul><ul><li>C'est souvent une mauvaise idée </li></ul></ul>
  74. 74. Les associations
  75. 75. Associations <ul><li>Cake peut scaffolder en fonction des associations de table </li></ul><ul><ul><li>Exemple : menu déroulant des posts dans les Commentaires </li></ul></ul><ul><li>Il faut définir les associations dans le Modèle </li></ul>
  76. 76. Associations <ul><li>Les associations sont définies dans les Modèles </li></ul><ul><li>Les différentes possibilités sont : </li></ul><ul><ul><li>hasOne </li></ul></ul><ul><ul><ul><li>Cardinalité 1-1 : un Utilisateur a un Profil </li></ul></ul></ul><ul><ul><li>belongsTo </li></ul></ul><ul><ul><ul><li>Cardinalité 1-1 : un Commentaire appartient à un Post </li></ul></ul></ul><ul><ul><li>hasMany </li></ul></ul><ul><ul><ul><li>Cardinalité 1-N : un Post a plusieurs Commentaires </li></ul></ul></ul><ul><ul><li>hasAndBelongsToMany </li></ul></ul><ul><ul><ul><li>Cardinalité N-N : les Posts ont plusieurs Tags </li></ul></ul></ul>
  77. 77. Associations <ul><li>Utilité des associations : </li></ul><ul><ul><li>Récupération automatiques de données </li></ul></ul><ul><ul><ul><li>Le paramètre ' $recursive' des Modèles permet de récupérer en même temps un Post et ses Commentaires </li></ul></ul></ul><ul><ul><li>Effacement lié </li></ul></ul><ul><ul><ul><li>Les Commentaires d'un Post peuvent être effacés en même temps que celui-ci </li></ul></ul></ul><ul><ul><li>Génération futée de scaffolding </li></ul></ul><ul><ul><ul><li>Les listes et menus déroulants sont automatiquement mis en relation </li></ul></ul></ul>
  78. 78. Associations - exemple <ul><li>Exemple : </li></ul><ul><ul><li>Rajouter l'attribut suivant au modèle ' Comment' : </li></ul></ul><ul><ul><ul><li>var $belongsTo = array('Post'); </li></ul></ul></ul><ul><ul><li>Les Commentaires sont maintenant associés aux Posts dans les vues scaffoldées </li></ul></ul>
  79. 79. Associations - exemple <ul><li>Exemple 2 : </li></ul><ul><ul><li>Rajouter l'attribut suivant au modèle 'Post ' : </li></ul></ul><ul><ul><ul><li>var $hasMany = array('Comment'); </li></ul></ul></ul><ul><ul><li>On peut maintenant accéder aux Commentaires d'un Post dans les Vues : </li></ul></ul><ul><ul><ul><li>echo $post['Comment'][0]['body']; </li></ul></ul></ul>
  80. 80. Aller (encore) plus vite : Bake.php
  81. 81. Bake.php - présentation <ul><li>Qu'est ce que c'est ? </li></ul><ul><ul><li>Un script à lancer depuis la ligne de commande </li></ul></ul><ul><li>Utilité : </li></ul><ul><ul><li>Bake génère des fichiers de code à partir de la BDD </li></ul></ul><ul><ul><li>On peut générer des Modèles, des Contrôleurs et des Vues </li></ul></ul>
  82. 82. Bake.php - présentation <ul><li>Comparaison bake/scaffolding </li></ul><ul><ul><li>Le scaffolding génère l'affichage dynamiquement </li></ul></ul><ul><ul><ul><li>Avantage : l'affichage suit instantanément un changement de schéma </li></ul></ul></ul><ul><ul><ul><li>Inconvénient : on ne peut pas éditer ou adapter le code produit </li></ul></ul></ul><ul><ul><li>Bake génère le code une fois pour toute </li></ul></ul><ul><ul><ul><li>Avantage : se baser sur le code produit pour développer rapidement </li></ul></ul></ul><ul><ul><ul><li>Inconvénient : ne prend pas en compte un changement de schéma </li></ul></ul></ul>
  83. 83. Bake.php - utilisation <ul><li>Appel de Bake : </li></ul><ul><ul><li>Bake s'appelle depuis la ligne de commande </li></ul></ul><ul><ul><li>Syntaxe générale : </li></ul></ul><ul><ul><ul><li>php.exe /cake/scripts/bake.php </li></ul></ul></ul><ul><ul><li>On peut passer des arguments au script </li></ul></ul><ul><li>Conseil : </li></ul><ul><ul><li>Pour appeler ' php.exe' depuis la ligne de commande, mieux vaut que php soit dans le PATH : </li></ul></ul><ul><ul><ul><li>Méthode 1 : éditer les variables d'environnement, puis redémarrer </li></ul></ul></ul><ul><ul><ul><li>Méthode 2 : taper 'set path=%path%;c:dossier_de_php' </li></ul></ul></ul>
  84. 84. Bake.php - utilisation <ul><li>Exemple pratique : </li></ul><ul><ul><li>Ouvrir une invite de commande </li></ul></ul><ul><ul><li>Naviguer jusqu'à '.../cake/scripts' </li></ul></ul><ul><ul><li>Taper : </li></ul></ul><ul><ul><ul><li>php bake.php </li></ul></ul></ul><ul><ul><li>Bake détecte automatiquement l'application à cuisiner </li></ul></ul><ul><ul><li>Suivre les instructions </li></ul></ul>

×