If you can't read please download the document
Upload
kemenaran
View
41.525
Download
4
Embed Size (px)
Citation preview
Formation PHP avanc
Pierre de La Morinerie
Junior Isep 2007
Programme de la formation
Programme de la formation
PHP Avanc :
Programmation Oriente Objet
Couches d'accs aux donnes
Frameworks :
Introduction aux frameworks
Prsentation du modle MVC
CakePHP :
Dcouverte et utilisation du framework CakePHP
Utilisation du scaffolding et des tests unitaires
Pour aller plus loin :
Introduction l'eXtreme Programming et aux tests unitaires
Programme de la formation
Objectifs de la formation :
Ne plus rcrire sans cesse le mme code
Se concentrer sur les tches essentielles
Pouvoir grer de gros projets en PHP
En rsum :
Programmer mieux et plus rapidement !
Programme de la formation
Un mot sur le droulement
Rythme
Sances
Introduction la POO
Introduction la POO - Gnralits
Objectifs de la Programation Orient Objet (POO) :
Modliser les programmes comme des interactions
d'objets
Concrtement :
En procdural, on manipule des fonctions
En POO, on manipule des objets
Introduction la POO - Gnralits
Avantages de la POO :
Code plus sr
Programmes sont plus clairs
Maintenance des applications facilite
Le code est facilement rutilisable
La POO rend possible le dveloppement de gros programme
Inconvnients de la POO :
Oblige rflchir et modliser avant de programmer
La notation POO nest pas toujours intuitive
Introduction la POO Classes et objets
Qu'est-ce qu'un objet ?
Un objet est une structure de donnes
Mais il inclus aussi les fonctions pour traiter ces
donnes
Un objet va donc comporter :
Des attributs, ou champs (comme dans une struct)
Des mthodes pour manipuler ces attributs
Introduction la POO Classes et objets
Exemple : Un objet animal comportera :
Des attributs :
Nom
ge
Taille
Poids
Des mthodes :
Nourrir()
Soigner()
Introduction la POO Classes et objets
Attention au vocabulaire :
Dire que Animal est un objet est un abus de langage
Animal n'est qu'un moule pour crer des objets
partir du moule Animal, je peux crer :
Un objet gorille, nomm Andr, de 6 ans
Un objet lion, nomm Alex, de 13 ans
Un objet tigre, nomm Henri, de 3 ans
Un moule d'objet est habituellement appel une classe
Crer un objet partir d'une classe s'appelle instancier
Ne surtout pas confondre classe (=moule) et objet (=contenu du moule) !
Introduction la POO Classes et objets
Exemple 1 : crer une classe et des objet en PHP
Introduction la POO Le constructeur
Le constructeur
Comment initialiser les valeurs par dfaut d'un objet ?
Le constructeur est appel chaque instanciation d'un objet
C'est une fonction qui a le mme nom que la classe
On peut y effectuer n'importe quelle opration
Accs aux attributs
La variable $this permet d'accder aux attributs de l'objet
Introduction la POO Le Constructeur
Exemple 2 : utilisation du constructeur
Introduction la POO Les mthodes
Les mthodes
Ce sont des fonctions pour manipuler les attributs des objets
Elles peuvent aussi manipuler d'autre objets
Les mthodes utilisent $this pour accder aux attributs
Autres utilisations des mthodes
Une mthode peut tre utilise comme une fonction classique
Elle peut prendre des paramtres et renvoyer un rsultat
Introduction la POO Les mthodes
Exemple 3 : utilisation des mthodes
Introduction la POO L'hritage
L'hritage
Une classe peut hriter d'une autre
Elle comporte alors tous les attributs et mthodes de la classe
parente
En pratique :
On peut dfinir une classe Lion qui hrite de Animal
Un objet de type Lion a alors un age, un nom...
On peut ensuite rajouter des particularits au Lion
Introduction la POO L'hritage
Exemple 4 : hritage de classes
Introduction la POO - TD
TD n1 :
Sujet : Modliser des vhicules
Contraintes :
Il y a deux types de vhicules : auto et bateau
Tous les vhicules ont une vitesse maximale
Les autos comportent :
une distance parcourue
une fonction voyager(km) qui incrmente la distance parcourue
Les bateaux comportent :
une longueur (par dfaut, la longueur est de 10)
Exercices :
1 : modliser une Auto et un Bateau
2 : modliser un Vhicule et deux classes hrites
Introduction la POO - TP
TP n1 :
Sujet : Raliser une classe MySQL
Contraintes :
Attributs host, login, password, db_base, is_connected
Un constructeur MySQL($host, $login, $password, $db_base) qui stocke les paramtres dans les attributs de la classe
Une mthode connect() qui connecte la BDD et met is_connected true
Une mthode query($sql) qui lance une requte MySQL et renvoie le rsultat (seulement si is_connected est true)
Une mthode disconnect() qui dconnecte de la BDD et met is_connected false
Introduction la POO - TP
TP n1 :
Intrt :
Utiliser facilement plusieurs connexions en simultan : un objet MySQL une connexion
Renvoyer directement des tableaux au lieu de recordsets
Rajouter des fonctions de log, de traitement des erreurs, de prprocessing, de traitement des donnes...
Traiter plusieurs SGDB : Oracle, PostgreSQL, etc
Les frameworks
Le modle MVC
Les frameworks
Dfinition
Avantages
Qualits ncessaires
Les frameworks Web existants
Fonctionnalits
Les frameworks - Dfinition
Un framework est un ensemble de bibliothques permettant le dveloppement rapide d'applications
Il existe des frameworks logiciels et des frameworks
Web
Comporte :
Une architecture :
Dfinit l'organisation des fichiers dans l'application
Des bibliothques
Fournit des composants utiles : RSS, authentification, Ajax, etc
Les frameworks - Avantages
Avantages d'un framework :
Cohrence
Libert
Qualit
Rapidit
Les frameworks Qualits ncessaires
Un framework doit tre :
Pas trop rigide
Pas trop flexible
Permettre l'intgration de composants tierce-partie
Les frameworks L'existant
PHP :
Symphony
Zend Framework
Prado
CakePHP
PHP on Trax
Ruby :
Ruby on Rails
Python :
Django
Turbogears
Java :
J2EE
Les frameworks L'existant
Un framework se choisit en fonction de :
L'exprience des dveloppeurs
Les besoins du client (publication, dveloppement...)
Le support interne (activit de la communaut)
L'hbergement
Idalement, le framework doit tre adapt chaque projet
En pratique, il est bon de choisir un framework suffisamment flexible et se s'y tenir
Les frameworks Fonctionnalits
Que peut-on trouver dans un framework web ?
Architecture MVC
SGDB multiples
ActiveRecord
Templates
Validation
Cache
Javascript/Ajax
Url rewriting
Modules
Authentification
Le modle MVC
MVC Modle Vue - Contrleur
Architecture 3-tiers
Permet de sparer les donnes, la logique et la prsentation
Le modle MVC
Modle :
Reprsente le comportement de l'application : traitements des donnes, interactions avec la base de donnes, etc.
Vue :
Correspond l'interface avec laquelle l'utilisateur interagit.
Souvent en HTML ou XML
La vue n'effectue aucun traitement, elle se contente d'afficher l'interfacer et les donnes fournies par le modle
Contrleur :
Rpond aux vnements mis par l'utilisateur
Contient toute la partie logique du code
Le modle MVC
Avantages :
Architecture extrmement claire
Paradigme utilis dans de nombreux projets logiciels ou Web
Permet de sparer la prsentation de l'accs aux donnes
Le modle MVC - Exemple
Exemple : un Livre d'or
Modle : classe Message
Requtes SQL
Mthode de rcupration des donnes : tousLesMessages(), messagesRcents(), etc
Contrleur : classe ControleurMessages
Analyse de GET et POST pour dterminer les donnes demandes
Rcupration des messages appropris
Pagination
Appel de la Vue correspondante
Vue : template VueMessages
Fichier PHP comprenant de l'HTML et quelques variables
Boucle sur les donnes du contrleur pour afficher la liste des messages
Le modle MVC - Exemple
Exemple : un Livre d'or
Exemple : un Livre d'or
Modle : classe Message
Requtes SQL
Mthode de rcupration des donnes : tousLesMessages(), messagesRcents(), etc
Vue : template VueMessages
Fichier PHP comprenant de l'HTML et quelques variables
Boucle sur les donnes du contrleur pour afficher la liste des messages
Contrleur : classe ControleurMessages
Analyse de GET et POST pour dterminer les donnes demandes
Rcupration des messages appropris
Pagination
Appel de la Vue correspondante
Introduction CakePHP
Introduction CakePHP
Origines
Fonctionnalits
Pourquoi Cake ?
Documentation
Introduction CakePHP Origines
Initi par Michal Tatarynowicz en 2005
Sous licence MIT (Libre, open-source, non contaminante)
Inspir de Ruby on Rails :
Des conventions plutt que de la configuration
Modle MVC
Scaffolding
Introduction CakePHP Fonctionnalits
Fonctionnalits principales :
Compatible PHP4 et PHP5
Gnration de CRUD et de requtes usuelles
Url rewriting
Templates rapides (pur PHP) et helpers
Facile dployer
Validation des donnes
Scaffolding (=chafaudage)
Cache des vues et/ou des requtes
SGBD multiples
Introduction CakePHP Pourquoi Cake
Ce qui fait de la bonne cuisine :
Simple et lger
Facile apprendre
Demeure du PHP
Facilement extensible
Bien document
Communaut active et sympathique
En bref...
Coder avec Cake est agrable
Introduction CakePHP Documentation
Il faut exploiter la bonne documentation de Cake !
Ressources utiles :
www.cakephp.com site officiel
manual.cakephp.com - le manuel complet de Cake
bakery.cakephp.org articles, tutoriaux et exemples
cakephp.org/files/cakesheet.pdf mmento gnral
CakePHP Premier tutoriel
Premier tutoriel
Rien de tel qu'un bon exemple
Fameux tutoriel A weblog in 15 minutes de Ruby on Rails
Cake peut raliser cela en bien moins !
Premier tutoriel Prrequis
Prrequis :
Un serveur Web
Un serveur de base de donnes
Premier tutoriel Installation de Cake
Installation de Cake :
Tlcharger CakePHP 1.1.* (stable) depuis cakephp.org
Dcompresser l'archive dans un dossier du WebRoot (par exemple formation_cake)
La structure finale doit donner :
/formation_cake
/app
/cake
/docs
/vendors
.htaccess
index.php
VERSION.txt
Premier tutoriel - Test
Testons l'installation :
http://localhost/formation_cake/
Premier tutoriel Configuration
Configuration de Cake :
Aller dans le dossier /app/config/
Renommer database.php.default endatabase.php
Ouvrir database.php et diter les informations de connexion :
var $default = array('driver' => 'mysql',
'connect' => 'mysql_connect',
'host' => 'localhost',
'login' => 'root',
'password' => '',
'database' => 'easyphp'
'prefix' => 'cake_' );
Premier tutoriel Configuration
Optionnel : au sujet de l'URL rewriting
Ouvrir le fichier de configuration d'Apache (httpd.conf)
Dcommenter les lignes :
LoadModule rewrite_module modules/mod_rewrite.so
AddModule mod_rewrite.c
Si on ne veut/peut pas utiliser mod_rewrite :
Ouvrir le fichier /app/config/core.php
Dcommenter la ligne :
define ('BASE_URL', env('SCRIPT_NAME'));
Premier tutoriel Configuration
Vrifions que Cake parvient se connecter notre BDD :
http://localhost/formation_cake/
Premier tutoriel Configuration
CakePHP est configur : nous pouvons commencer raliser notre blog
Premier tutoriel BDD
Cration de la Base de Donnes :
Ouvrez phpMyAdmin
Crez une table cake_posts :
CREATE TABLE posts (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(50),
body TEXT,
created DATETIME DEFAULT NULL,
modified DATETIME DEFAULT NULL
);
Insrez quelques posts dans la table
Premier tutoriel BDD
Cration du Modle
Cration du Contrleur
Cration de la Vue
Premier tutoriel Code
Modle :
Li une table de la BDD
Par convention, le fichier et la classe sappellent du nom de la table, au singulier :
Fichier : post.php
Classe : Post
La classe hrite de Model, qui dfinit des fonctions par dfaut
Lattribut name nest pas strictement obligatoire, mais permet de rsoudre quelques bizarreries de PHP4. Il doit comporter le nom du modle.
Premier tutoriel Code
Contrleur :
Par convention, le fichier et la classe sappellent du nom de la table, au pluriel :
Fichier : posts_controller.php
Classe : PostsController
Les fonctions du contrleur sont appeles par :
/controlleur/action
'index()' est l'action par dfaut
Exemple : /posts/index
La mthode set() passe des donnes la Vue
La mthode du modle findAll() rcupre tous les enregistrements du modle, et renvoie un tableau
Premier tutoriel Code
Vue :
Un fichier HTML dans lequel on peut rajouter un peu de PHP
Nom du fichier : app/views/model_name/action_name.thtml
Exemple :
app/views/posts/index.thtml
On peut maintenant tester en allant lUrl :
/posts/index
Premier tutoriel Code
Vue : Helpers
Petits composants de formatage
Utiliss dans les Vues
Permettent de formatter du HTML, des formulaires, du Javascript, des dates, du texte
Documents dans le Manuel
HtmlHelper :
Contient une mthode url(), qui prend transforme une Url absolue en Url relative :
/controlleur/action => localhost/formation_cake/controlleur/action
Premier tutoriel Code
Affichage des posts
Cration d'une action 'view' dans notre Contrleur
Une action peut prendre des paramtres
Il seront passs dans l'Url de la page
Exemple :
function view($id) => /posts/view/2
Cration de la vue 'view.thtml'
Premier tutoriel Code
Ajout d'un Post
Cration d'une action 'add' dans notre Contrleur
$this->params contient les paramtres passs en $_POST
$this->data est un raccourci pour $this->params['data']
Model->save() sauvegarde des donnes
Format : ['Model']['field'] = value
Flash() affiche un message et une redirection
Premier tutoriel Code
Ajout d'un Post
Cration de la vue
Les Helpers 'Html' et 'Form' sont trs utiles
Mais on peut aussi crire le code en pur Html
Helpers de champs
1er argument : 'Model/field' : gnre un name=''data[Model][field]''
2me argument : tableau d'options Html
Premier tutoriel Code
Ajout d'un Post - validation des donnes
De fait au niveau du Modle
Attribut $validate :
'field' => VALID_CONSTANT
Les constantes de validation sont :
VALID_NOT_EMPTY
VALID_NUMBER
VALID_EMAIL
VALID_YEAR
On peut dfinir la fonction Model::invalidate() pour un contrle plus fin
Premier tutoriel Code
Ajout d'un Post - validation des donnes
Affichage des messages :
Fonction $html->setErrorTag('Model/field', 'Message
d'erreur')
La validation de Cake est extensible et finement configurable tous les niveaux (Modle, Contrleur, Vue)
Premier tutoriel Code
Suppression d'un Post
Cration de l'action dans le Contrleur :
Model->delete()
Inutile de crer une vue : on redirige aprs l'action
Premier tutoriel Code
Edition d'un Post
Cration de l'action du Contrleur
Pr-remplir '$this->data' permet de prremplir les champs
On utilise toujours la fonction Model->save(), comme pour un ajout
Si un champ 'id' est dfinit dans les donnes, 'save()' va essayer
de mettre jour ces donnes
Cration de la Vue
Quasiment identique 'add.thtml'
On rajoute un champ 'hidden' nomm 'id', pour permettre la mise jour
Nota : on pourrait combiner 'add.thtml' et 'edit.thtml' sans difficults
Premier tutoriel Code
Edition des routes
Fichier app/config/routes.php
Permet d'associer n'importe quelle adresse n'importe quelle
action
Dbogage
Controll par la variable de configuration DEBUG (config.php)
Dtermine les messages d'erreurs, les dump SQL, etc
Premier tutoriel Fin
Un mot sur l'extensibilit
App_controller : actions communes tous les contrleurs
App_model : mthodes communes tous les modles
Components : petits contrleurs partags
Elements : petits bouts de templates rutilisables (thtml)
Layouts : gabarits gnraux (thtml)
Plugins : ensemble autonome de contrleurs (ex: un forum)
Premier tutoriel Conclusion
Fin du tutoriel
Pour aller plus loin :
Lisez le Manuel en entier !
Lisez ventuellement l'API et/ou les sources
Essayez de rajouter des Commentaires au blog
Aller plus vite :
Le scaffolding
Scaffolding - prsentation
Emploi :
Le scaffolding produit une interface d'administration en analysant les bases de donnes
Les actions sont gnres dynamiquement chaque appel (pas de gnration de code)
Usage :
Mise en place de structures temporaires
Dveloppement rapide tant que les schmas ne sont pas fixs
Limites :
Ce n'est que de l'chafaudage
Pas totalement flexible
Souvent ncessaire d'crire son propre code
Scaffolding - utilisation
Pour activer le scaffolding dans un Contrleur :
Mettre un attribut '$scaffold' dans le contrleur
C'est tout !
Note : il faut tout de mme crer un Modle avant
Scaffolding - exemple
Ajout de Commentaires notre blog (1/3)
Cration de la table 'comments' dans la Base de donne
id (INT)
post_id (INT)
author (VARCHAR 50)
body (TEXT)
created (DATETIME)
Scaffolding - exemple
Ajout de Commentaires notre blog (2/3)
Cration du Modle
Cration d'un Contrleur vide
Attribut '$scaffold'
Scaffolding - exemple
Ajout de Commentaires notre blog (3/3)
Test
http://localhost/formation_cake/comments/index
Scaffolding modification du scaffolding
Remplacement des vues du scaffolding
Crer une ou plusieurs des vues nommes :
index.scaffold.thtml
show.scaffold.thtml
add.scaffold.thtml
edit.scaffold.thtml
On peut remplacer les vues scaffoldes pour toute l'application ou juste pour un contrleur particulier
Possibilit de s'inspirer des vues scaffoldes de Cake
/cake/libs/view.templates/scaffolds
Scaffolding modification du scaffolding
Remplacement des actions du scaffolding
On peut crer des actions nommes :
index
show
add
edit
delete
C'est souvent une mauvaise ide
Les associations
Associations
Cake peut scaffolder en fonction des associations de table
Exemple : menu droulant des posts dans les Commentaires
Il faut dfinir les associations dans le Modle
Associations
Les associations sont dfinies dans les Modles
Les diffrentes possibilits sont :
hasOne
Cardinalit 1-1 : un Utilisateur a un Profil
belongsTo
Cardinalit 1-1 : un Commentaire appartient un Post
hasMany
Cardinalit 1-N : un Post a plusieurs Commentaires
hasAndBelongsToMany
Cardinalit N-N : les Posts ont plusieurs Tags
Associations
Utilit des associations :
Rcupration automatiques de donnes
Le paramtre '$recursive' des Modles permet de rcuprer en mme
temps un Post et ses Commentaires
Effacement li
Les Commentaires d'un Post peuvent tre effacs en mme temps que
celui-ci
Gnration fute de scaffolding
Les listes et menus droulants sont automatiquement mis en relation
Associations - exemple
Exemple :
Rajouter l'attribut suivant au modle 'Comment' :
var $belongsTo = array('Post');
Les Commentaires sont maintenant associs aux Posts dans les vues scaffoldes
Associations - exemple
Exemple 2 :
Rajouter l'attribut suivant au modle 'Post' :
var $hasMany = array('Comment');
On peut maintenant accder aux Commentaires d'un Post dans les Vues :
echo $post['Comment'][0]['body'];
Aller (encore) plus vite :
Bake.php
Bake.php - prsentation
Qu'est ce que c'est ?
Un script lancer depuis la ligne de commande
Utilit :
Bake gnre des fichiers de code partir de la BDD
On peut gnrer des Modles, des Contrleurs et des Vues
Bake.php - prsentation
Comparaison bake/scaffolding
Le scaffolding gnre l'affichage dynamiquement
Avantage : l'affichage suit instantanment un changement de schma
Inconvnient : on ne peut pas diter ou adapter le code produit
Bake gnre le code une fois pour toute
Avantage : se baser sur le code produit pour dvelopper rapidement
Inconvnient : ne prend pas en compte un changement de schma
Bake.php - utilisation
Appel de Bake :
Bake s'appelle depuis la ligne de commande
Syntaxe gnrale :
php.exe /cake/scripts/bake.php
On peut passer des arguments au script
Conseil :
Pour appeler 'php.exe' depuis la ligne de commande, mieux vaut que php soit dans le PATH :
Mthode 1 : diter les variables d'environnement, puis redmarrer
Mthode 2 : taper 'set path=%path%;c:\dossier_de_php'
Bake.php - utilisation
Exemple pratique :
Ouvrir une invite de commande
Naviguer jusqu' '.../cake/scripts'
Taper :
php bake.php
Bake dtecte automatiquement l'application cuisiner
Suivre les instructions