SlideShare uma empresa Scribd logo
1 de 49
{{
Introduction à CakePHP
Aurélien Vairet et Pierre Martin
{{ Qui sommes nous ?
● Aurélien
● Développeur web
● Communauté CakePHP
● Membre AFUP
● Pierre
● Expert CakePHP (CakeDC)
● Geek
● (ex ?) blogueur : http://pierre-martin.fr
@pierremartin
{{ Un framework ?
● un framework est un kit de composants logiciels
structurels, qui définissent les fondations ainsi que les
grandes lignes de l'organisation de tout ou partie d'un
logiciel.
● un framework est conçu en vue d'aider les programmeurs
dans leur travail. L'organisation du framework vise la
productivité maximale du programmeur qui va l'utiliser.
(Wikipedia)
{{ Le framework CakePHP
● A la fois kit de composants et cadre de travail
● Open Source, licence MIT
● Communautaire !
● Orienté RAD
● Inspiré de Ruby on Rails
{{ Un peu d'histoire...
● Avril 2005 : création par Michal Tatarynowicz
● Juillet 2005 : version 0.9, départ de Michal, repris par
Larry Masters et Kamil Dzielinski, rejoints par Nate Abele
et Garret Woodworth
● Mai 2006 : CakePHP 1.0 est publié
● 2007 : sortie v 1.1
● Décembre 2008 : Cake 1.2 stable
● Octobre 2009 : scission → Lithium
{{ Un peu d'histoire...
● Décembre 2009 : Cake 1.3 bêta, migration Github, forte
implication de la communauté
● Avril 2010 : 1.3.0 stable
● Versions actuelles : 1.2.8 / 1.3.5
● 2011 : CakePHP 2.0 ?
{{ Quelques chiffres...
● Fin 2009 : 1 million de téléchargements depuis origine
● 305 000 l. de code (160 000 l. commentaires)
● 21 500 commits
● 45 contributeurs directs
● 15 000 membres sur le Google Group
● 900 membres sur le forum FR
● doc disponible en 25 langues
{{ Ressources
Officielles
● cakephp.org
● Bakery (bakery.cakephp.org)
● CookBook (book.cakephp.org)
● CakeQS (ask.cakephp.org)
● API (api.cakephp.org)
● github.com/cakephp
{{
● cakephp.lighthouseapp.com/home
● Google group (groups.google.com/group/cake-php)
● irc @freenode (#cakephp)
Francophones
● cakephp-fr.org
● forum.cakephp-fr.org
● irc @freenode (#cakephp-fr)
● formation-cakephp.com
{{ Références
{{ Références
{{ Références
{{ Références
{{ Références
{{ Philosophie
● Convention over configuration
● DRY
● "Automagie"
● Souplesse et personnalisation
● TDD
{{ Caractéristiques
● Design patterns MVC et Active Record
● Compatible PHP 4 et 5
● Fonctions CRUD intégrées
● Scaffolding
● Génération de code
● URL personnalisées : Routes
● Validation, nettoyage et sécurisation des données
● Authentification et contrôle d'accès (ACL)
{{ Caractéristiques
● Cache : fichier, APC, Xcache, MemCache
● Localisation et internationalisation
● Pagination
● Ajax, Javascript, Formulaires...
● Email, Cookie, Security, Session...
● Tests unitaires (SimpleTest)
● Services Web REST...
{{ Modèles
● Logique métier : objets et données
● Accès aux données (find)
● Enregistrement (save - saveAll)
● Suppression (delete)
● Validation
● Callbacks (beforeFind, afterSave, etc.)
{{ Sources de données
● liens entre les modèles et la source de données qu'ils
représentent
● le + souvent BDD relationnelle
● annuaire LDAP, API, fichiers XML ou CSV
● support natif MySql(i), MSSsql, Oracle, Postgres, Sqlite
● support communautaire AdoDb, Db2, Firebird, ODBC,
Sybase, Pdo, etc.
{{ Comportements
● Extensions des modèles
● Logique partagée mais non directement métier
● Collection de fonctionnalités (Mixin) avec des callbacks
{{ Contrôleurs
● Logique applicative
● Répondent aux requêtes
● Appel aux modèles
● Interactions avec les vues
● Contrôle du flux
● Callbacks (beforeFilter, beforeRender)
{{ Composants
● Extensions des contrôleurs
● Regroupements de logique applicative
● Évite de dupliquer fonctionnalités (DRY)
{{ Vues
● Logique d'affichage
● Correspondent à une action d'un contrôleur
● Templates HTML avec un soupçon de logique PHP
● XML, JSON, CSV...
● Layouts
● Elements
● Thèmes
● Vues Média (fichiers binaires)
{{ Assistants
● Extensions des vues
● Classe encapsule logique de présentation
● Partage de fonctionnalités (DRY) entre vues, layouts et
elements
{{ Requête CakePHP
{{
CUISINONS !
{{ Installation
Ingrédients
● Un serveur web, Apache, mais aussi IIS, Lighttpd, nginx
● PHP 4.3.2 >> PHP 5.3
● Une base de données (pas obligatoire techniquement) :
Mysql(i), Oracle, SQLServer, Postgres, SQLite
Préparation
● Téléchargement ou clone sur Github
● Copier les fichiers dans le webroot (ou autre)
{{ Fichiers de App
{{ Conventions
● Nom de la table : recettes (PK : id, FK : auteur_id)
● Nom du modèle : Recette (app/models/recette.php)
● Nom du contrôleur : RecettesController
(app/controllers/recettes_controller.php)
● Nom du fichier de vue : index.ctp
(app/views/recettes/index.ctp)
http://www.example.com/cakephp/recettes/index
{{ Configuration
● Automatisée / Assistée si génération du code
● Base de données (config/database.php)
● config/core.php
● Security.salt
● Debug
● webroot/index.php
{{ Du code !
Microblog
● Création de l'application
● Configuration (très peu !)
● Base de données
● Un peu de magie
● Associations
● Authentification
● Vues
{{ Création de l'application
● Ligne de commande
$ cake bake microblog
Fait beaucoup de choses pour nous !
● Manuellement
● Dossier /app
{{
{{ Base de données
{{ Un peu de magie
● cake bake all
● Demande à CakePHP de générer TOUT le code pour
nous
● Modèles, Contrôleurs, Vues, Tests, Café
● En pratique : cake bake
● Templates personnalisables
{{ Scaffolding
● Prototypage des actions / vues CRUD
● Aucun fichier créé
● Validation des modèles initiaux (conventions)
{{ Associations
● Tweet belongsTo User
● User hasMany Tweet
● User hasAndBelongsToMany Follower
● User hasAndBelongsToMany Following
● Nous n'avons pas suivi les conventions :(
users_users
● … parfois c'est mieux !
{{ Associations
public $belongsTo = array(
'User' => array(
'counterCache' => true,
'dependent' => true
)
);
{{ Associations
public $belongsTo = array(
'User' => array(
'counterCache' => true,
'dependent' => true
)
);
public $hasMany = array('Tweet');
{{ Associations
public $belongsTo = array(
'User' => array(
'counterCache' => true,
'dependent' => true
)
);
public $hasMany = array('Tweet');
public $hasAndBelongsToMany = array(
'Follower' => array(
'className' => 'User',
'joinTable' => 'follow',
'foreignKey' => 'user_id',
'associationForeignKey' => 'follower_id'
),
'Following' => array(
'className' => 'User',
'joinTable' => 'follow',
'foreignKey' => 'follower_id',
'associationForeignKey' => 'user_id',
),
);
{{ Authentification
● AuthComponent
● Behavior => Model / Component => Controller / Helper => View
● Conventions = Peu de configuration
● Modèle : User
● Contrôleur : UsersController
● Champs : username / password
● Cryptage : sha1
{{ Authentification 1/3
class AppController extends Controller {
public $components = array('Auth', 'Session');
}
● Inclusion du composant
{{ Authentification 2/3
class UsersController extends AppController {
// […]
public function login() {
// Nous n'avons besoin de rien faire, merci Cake !
}
public function logout() {
$this->Session->destroy();
$this->Session->setFlash('Vous êtes déconnecté');
$this->redirect($this->Auth->logout());
}
// [...]
}
● Création des actions login() et logout()
{{ Authentification 3/3
class UsersController extends AppController {
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allowedActions = array('index', 'view', 'add');
}
public function edit() {
$id = $this->Auth->user('id');
if (!empty($this->data)) {
$this->data['User']['id'] = $id;
// […] Sauvegarde
} else {
// […] Lecture
}
}
}
● Implémentation de notre logique !
{{ Vues
{{ Vues
{{ Vues
<div class="users form">
<?php
echo $this->Form->create('User');
echo $this->Form->input('username');
echo $this->Form->input('password');
echo $this->Form->end(__('Submit', true));
?>
</div>
<div class="actions">
<h3><?php __('Actions'); ?></h3>
<ul>
<li><?php
echo $this->Html->link(__('List Users', true), array('action' => 'index'));
?></li>
</ul>
</div>
{{ Fork me!
● https://github.com/cakephp-fr/microblog
● Détail commit par commit
● Encore plus de choses ?
● Nous attendons vos suggestions !
● Ajax, MongoDb, I18n, ?
● contact@cakephp-fr.org
● Feedbacks : Joind.in (ou autre !)
{{ Bon appétit !

Mais conteúdo relacionado

Mais procurados

Exposer des services web SOAP et REST avec symfony 1.4 et Zend Framework
Exposer des services web SOAP et REST avec symfony 1.4 et Zend FrameworkExposer des services web SOAP et REST avec symfony 1.4 et Zend Framework
Exposer des services web SOAP et REST avec symfony 1.4 et Zend Framework
Hugo Hamon
 

Mais procurados (20)

Php & My Sql
Php & My SqlPhp & My Sql
Php & My Sql
 
Zend Framework 2.0 - Le gestionnaire de modules
Zend Framework 2.0 - Le gestionnaire de modulesZend Framework 2.0 - Le gestionnaire de modules
Zend Framework 2.0 - Le gestionnaire de modules
 
Application web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrapApplication web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrap
 
Cours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partieCours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partie
 
Utilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPUtilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHP
 
Php
PhpPhp
Php
 
Cours php & Mysql - 3éme partie
Cours php & Mysql - 3éme partieCours php & Mysql - 3éme partie
Cours php & Mysql - 3éme partie
 
Introduction à Zend Framework
Introduction à Zend FrameworkIntroduction à Zend Framework
Introduction à Zend Framework
 
Cours php & Mysql - 5éme partie
Cours php & Mysql - 5éme partieCours php & Mysql - 5éme partie
Cours php & Mysql - 5éme partie
 
Introduction à Symfony
Introduction à SymfonyIntroduction à Symfony
Introduction à Symfony
 
Une application en deux heure - PHP Québec Janvier 2009
Une application en deux heure - PHP Québec Janvier 2009Une application en deux heure - PHP Québec Janvier 2009
Une application en deux heure - PHP Québec Janvier 2009
 
PHP Composer : Pourquoi ? Comment ? Et plus ...
PHP Composer : Pourquoi ? Comment ? Et plus ...PHP Composer : Pourquoi ? Comment ? Et plus ...
PHP Composer : Pourquoi ? Comment ? Et plus ...
 
Symfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesSymfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiques
 
Initiation à Express js
Initiation à Express jsInitiation à Express js
Initiation à Express js
 
Introduction à Laravel
Introduction à LaravelIntroduction à Laravel
Introduction à Laravel
 
Introduction à React
Introduction à ReactIntroduction à React
Introduction à React
 
Php4 Mysql
Php4 MysqlPhp4 Mysql
Php4 Mysql
 
Plateforme De DéVeloppement En Php5 (Zend + Doctrine)
Plateforme De DéVeloppement En Php5 (Zend + Doctrine)Plateforme De DéVeloppement En Php5 (Zend + Doctrine)
Plateforme De DéVeloppement En Php5 (Zend + Doctrine)
 
Exposer des services web SOAP et REST avec symfony 1.4 et Zend Framework
Exposer des services web SOAP et REST avec symfony 1.4 et Zend FrameworkExposer des services web SOAP et REST avec symfony 1.4 et Zend Framework
Exposer des services web SOAP et REST avec symfony 1.4 et Zend Framework
 
Mieux Développer en PHP avec Symfony
Mieux Développer en PHP avec SymfonyMieux Développer en PHP avec Symfony
Mieux Développer en PHP avec Symfony
 

Destaque

Symfony2 Introduction Presentation
Symfony2 Introduction PresentationSymfony2 Introduction Presentation
Symfony2 Introduction Presentation
Nerd Tzanetopoulos
 
rapport_stage_issame
rapport_stage_issamerapport_stage_issame
rapport_stage_issame
AMAL Issame
 
Node.js et MongoDB: Mongoose
Node.js et MongoDB: MongooseNode.js et MongoDB: Mongoose
Node.js et MongoDB: Mongoose
jeromegn
 
Introduction au webmapping au-dela de google maps
Introduction au webmapping  au-dela de google mapsIntroduction au webmapping  au-dela de google maps
Introduction au webmapping au-dela de google maps
VisionGÉOMATIQUE2012
 

Destaque (20)

Symfony2 Introduction Presentation
Symfony2 Introduction PresentationSymfony2 Introduction Presentation
Symfony2 Introduction Presentation
 
Symfony 2 : chapitre 1 - Présentation Générale
Symfony 2 : chapitre 1 - Présentation GénéraleSymfony 2 : chapitre 1 - Présentation Générale
Symfony 2 : chapitre 1 - Présentation Générale
 
de Google Maps à OpenStreetMap
de Google Maps à OpenStreetMapde Google Maps à OpenStreetMap
de Google Maps à OpenStreetMap
 
3.2 Les Infrastructures de données spatiales régionales développées dans le p...
3.2 Les Infrastructures de données spatiales régionales développées dans le p...3.2 Les Infrastructures de données spatiales régionales développées dans le p...
3.2 Les Infrastructures de données spatiales régionales développées dans le p...
 
Installation apache mandriva
Installation apache mandrivaInstallation apache mandriva
Installation apache mandriva
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
 
rapport_stage_issame
rapport_stage_issamerapport_stage_issame
rapport_stage_issame
 
Node.js et MongoDB: Mongoose
Node.js et MongoDB: MongooseNode.js et MongoDB: Mongoose
Node.js et MongoDB: Mongoose
 
Bases de données spatiales
Bases de données spatialesBases de données spatiales
Bases de données spatiales
 
Bases de données Spatiales - POSTGIS
Bases de données Spatiales - POSTGISBases de données Spatiales - POSTGIS
Bases de données Spatiales - POSTGIS
 
Introduction au webmapping au-dela de google maps
Introduction au webmapping  au-dela de google mapsIntroduction au webmapping  au-dela de google maps
Introduction au webmapping au-dela de google maps
 
Presentation Symfony
Presentation SymfonyPresentation Symfony
Presentation Symfony
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linux
 
Les cartes mentales_v1.0
Les cartes mentales_v1.0Les cartes mentales_v1.0
Les cartes mentales_v1.0
 
Presentation du framework symfony
Presentation du framework symfonyPresentation du framework symfony
Presentation du framework symfony
 
P4 intents
P4 intentsP4 intents
P4 intents
 
P3 listes et elements graphiques avancés
P3 listes et elements graphiques avancésP3 listes et elements graphiques avancés
P3 listes et elements graphiques avancés
 
P2 éléments graphiques android
P2 éléments graphiques androidP2 éléments graphiques android
P2 éléments graphiques android
 
P6 composants avancés
P6 composants avancésP6 composants avancés
P6 composants avancés
 
P1 introduction à android
P1 introduction à androidP1 introduction à android
P1 introduction à android
 

Semelhante a Introduction à CakePHP

Oxalide Morning tech #2 - démarche performance
Oxalide Morning tech #2 - démarche performanceOxalide Morning tech #2 - démarche performance
Oxalide Morning tech #2 - démarche performance
Ludovic Piot
 
Enib cours c.a.i. web - séance #1 - html5 css3-js - 1
Enib   cours c.a.i. web - séance #1 - html5 css3-js - 1Enib   cours c.a.i. web - séance #1 - html5 css3-js - 1
Enib cours c.a.i. web - séance #1 - html5 css3-js - 1
Horacio Gonzalez
 
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2
Horacio Gonzalez
 

Semelhante a Introduction à CakePHP (20)

l'Industrialisation (avec PHP) @MMIConnect
l'Industrialisation (avec PHP) @MMIConnectl'Industrialisation (avec PHP) @MMIConnect
l'Industrialisation (avec PHP) @MMIConnect
 
Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)
 
Morning tech #2 - Démarche performance slides
Morning tech #2 - Démarche performance slidesMorning tech #2 - Démarche performance slides
Morning tech #2 - Démarche performance slides
 
Oxalide Morning tech #2 - démarche performance
Oxalide Morning tech #2 - démarche performanceOxalide Morning tech #2 - démarche performance
Oxalide Morning tech #2 - démarche performance
 
Monitoring d'applications/environnements PHP : APM et Pinba
Monitoring d'applications/environnements PHP : APM et PinbaMonitoring d'applications/environnements PHP : APM et Pinba
Monitoring d'applications/environnements PHP : APM et Pinba
 
Devoxx: Tribulation d'un développeur sur le Cloud
Devoxx: Tribulation d'un développeur sur le CloudDevoxx: Tribulation d'un développeur sur le Cloud
Devoxx: Tribulation d'un développeur sur le Cloud
 
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
 
Django by mrjmad
Django by mrjmadDjango by mrjmad
Django by mrjmad
 
Gwt fast overview_v1
Gwt fast overview_v1Gwt fast overview_v1
Gwt fast overview_v1
 
PHP et Performances - AFUP 2005
PHP et Performances - AFUP 2005PHP et Performances - AFUP 2005
PHP et Performances - AFUP 2005
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
 
Infrastructure as code drupal
Infrastructure as code drupalInfrastructure as code drupal
Infrastructure as code drupal
 
[RMLL2017] Templer, Git, Bootstrap, PHP : des outils libres pour concevoir le...
[RMLL2017] Templer, Git, Bootstrap, PHP : des outils libres pour concevoir le...[RMLL2017] Templer, Git, Bootstrap, PHP : des outils libres pour concevoir le...
[RMLL2017] Templer, Git, Bootstrap, PHP : des outils libres pour concevoir le...
 
Présentation Drupal - Global Training Days
Présentation Drupal - Global Training DaysPrésentation Drupal - Global Training Days
Présentation Drupal - Global Training Days
 
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
 
Enib cours c.a.i. web - séance #1 - html5 css3-js - 1
Enib   cours c.a.i. web - séance #1 - html5 css3-js - 1Enib   cours c.a.i. web - séance #1 - html5 css3-js - 1
Enib cours c.a.i. web - séance #1 - html5 css3-js - 1
 
Accélération des pages Web : les bases en exemple
Accélération des pages Web : les bases en exempleAccélération des pages Web : les bases en exemple
Accélération des pages Web : les bases en exemple
 
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2
 
Conference drupal 8 au Forum PHP 2013 à Paris
Conference drupal 8 au Forum PHP 2013 à ParisConference drupal 8 au Forum PHP 2013 à Paris
Conference drupal 8 au Forum PHP 2013 à Paris
 
Industrialisez le développement et la maintenance de vos sites avec Drupal
Industrialisez le développement et la maintenance de vos sites avec DrupalIndustrialisez le développement et la maintenance de vos sites avec Drupal
Industrialisez le développement et la maintenance de vos sites avec Drupal
 

Mais de Pierre MARTIN

Mais de Pierre MARTIN (6)

Using and reusing CakePHP plugins
Using and reusing CakePHP pluginsUsing and reusing CakePHP plugins
Using and reusing CakePHP plugins
 
Building custom APIs
Building custom APIsBuilding custom APIs
Building custom APIs
 
Test and API-driven development of CakePHP Behaviors
Test and API-driven development of CakePHP BehaviorsTest and API-driven development of CakePHP Behaviors
Test and API-driven development of CakePHP Behaviors
 
Recipes for successful CakePHP projects
Recipes for successful CakePHP projectsRecipes for successful CakePHP projects
Recipes for successful CakePHP projects
 
The CakePHP Media Plugin
The CakePHP Media PluginThe CakePHP Media Plugin
The CakePHP Media Plugin
 
Internationalizing CakePHP Applications
Internationalizing CakePHP ApplicationsInternationalizing CakePHP Applications
Internationalizing CakePHP Applications
 

Introduction à CakePHP