formation php avancé - cake php

Download Formation PHP avancé - Cake PHP

If you can't read please download the document

Upload: kemenaran

Post on 16-Apr-2017

41.523 views

Category:

Technology


4 download

TRANSCRIPT

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