SlideShare une entreprise Scribd logo
1  sur  41
Télécharger pour lire hors ligne
© All rights reserved. Zend Technologies, Inc.
Introduction à
Zend Framework 2
Mickaël Perraud
© All rights reserved. Zend Technologies, Inc.
Mickael Perraud
Contributeur ZF depuis 2007
Responsable documentation française
Travaille sur l'aide à la traduction et
propose les versions déconnectées de la
documentation PDF / CHM
@mikaelkael / http://mikaelkael.fr
3 © All rights reserved. Zend Technologies, Inc.
Zend Framework 2 : pourquoi ?
© All rights reserved. Zend Technologies, Inc.
Zend Framework jusqu'à aujourd'hui
Annoncé en octobre 2005
Mars 2006 : v0.1
Juillet 2007 : v1.0 : MVC, Db, Acl, Auth
Mars 2008 : v1.5 : Form, Layout, Context
Avril 2009 : v1.8 : Application, Tool, Nav
Juin 2010 : formation CRTeam
Octobre 2010 : v1.11 : Cloud, UserAgent
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0
Don't think
think
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0
« The primary thrust of ZF 2.0 is to make a more
consistent, well-documented product, improving
developer productivity and runtime performance. »
Matthew Weier OʼPhinney
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : buts principaux
Améliorer l'extensibilité
Améliorer les performances
Améliorer la courbe d'apprentissage
Réécrire quand cela est nécessaire
8 © All rights reserved. Zend Technologies, Inc.
Zend Framework 2 :
améliorer l'extensibilité
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : améliorer
l'extensibilité
Suppression des Singletons
Programmation par contrat : des interfaces au
dessus des classes abstraites
Suppression des dépendances codées en dur
10 © All rights reserved. Zend Technologies, Inc.
Zend Framework 2 :
améliorer les performances
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : améliorer les
performances
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : améliorer les
performances
« Kill the magic! »
Autoloading
Chargement des plugins
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : « kill the magic! »
Exemple d'un view helper classique :
echo $this->headLink()->appendStylesheet('foo.css');
/**
* Lance Zend_View::__call()
* Appelle Zend_View::getHelper()
* Appelle Zend_View::_getPlugin()
* Appelle Zend_Loader_PluginLoader::load()
* Appelle Zend_Loader::isReadable()
* Appelle call_user_func (hits autoloader...)
* qui appelle Zend_Loader::loadClass
* qui appelle Zend_Loader::loadFile
* qui appelle include_once
* Instanciation de l'helper
* Appelle la méthode de l'helper via call_user_func_array()
* Retourne l'instance de l'helper
* Appelle la méthode de l'instance (lance __call...))
*/
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : « kill the magic! »
Enlevons la magie :
$this->broker('head_link')
->appendStylesheet('foo.css');
/**
* Lance PhpRenderer::broker()
* Appelle HelperBroker::load()
* Appelle HelperLoader::load()
* Lance autoloader
* qui réalise un include_once
* Instanciation de l'helper
* Appelle la méthode de l'helper
*/
=> La magie dégrade les performances
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : « kill the magic! »
Questions légitimes du débutant :
C'est quoi view ? C'est défini où ?
Où est le rendu dans tout ça ?
Et les layouts ?
class MonController extends Zend_Controller_Action
{
public function monAction()
{
$this->view->maVariable = 'maValeur';
}
}
=> La magie rend l'apprentissage plus difficile
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : autoloading
Suppression des require_once
Option 1 : ClassMapAutoloader - fichier de mapping
Pré-compile un tableau de mapping pour tout
ZF et par composant
Outils pour générer le mapping
Le plus efficace en terme de performances
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : autoloading
Option 1 :
php classmap_generator.php Some/Directory/
// .classmap.php
return array(
'FooSomeController' => __DIR__ . '/foo/controllers/SomeController.php',
'FooModelBar' => __DIR__ . '/foo/models/Bar.php',
);
// ClassMapAutoloader
require_once 'Zend/Loader/ClassMapAutoloader.php';
$loader = new ZendLoaderClassMapAutoloader('./.classmap.php');
$loader->register();
$bar = new FooModelBar();
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : autoloading
Option 2 : StandardAutoloader - un tableau explicite
de paires namespaces => dossier
Pas d'utilisation de l'include_path
Flexibilité et performance au cours du
développement
Peut aussi agir en autoloader par défaut
(s'appuie sur include_path)
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : autoloading
Option 2 :
require_once 'Zend/Loader/StandardAutoloader.php';
$loader = new ZendLoaderStandardAutoloader();
$loader->registerNamespace('Mkk', APPLICATION_PATH . '/../library/Mkk');
$loader->registerPrefix('Doctrine', APPLICATION_PATH .
'/../library/Doctrine');
// ceci n'est pas recommandé mais reste toutefois possible
$loader->setFallbackAutoloader(true);
$loader->register();
$foo = new MkkModelFoo();
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : plugin loading
Problèmes :
L'autoloading basé sur une pile de chemins est lent
La casse est importante
Les solutions actuelles ne s'intéressent qu'à
l'aspect chargement des classes
L'instanciation est différente suivant les
composants
La persistance est différente suivant les
composants
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : plugin loading
Solution
Mapping avec alias par défaut
namespace MyPlugins;
use ZendLoaderPluginClassLoader;
class ComponentLoader extends PluginClassLoader
{
protected $plugins = array(
'foo' => 'MyPluginsFoo',
'bar' => 'MyPluginsBar',
'foobar' => 'MyPluginsFooBar',
);
}
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : plugin loading
Loaders couplés avec des Brokers
Agissant comme un registre
Permettant l'instanciation (avec
arguments)
namespace MyComponent;
use ZendLoaderPluginClassLoader,
ZendLoaderPluginBroker;
class ComponentBroker extends PluginBroker
{
protected $defaultClassLoader = 'MyComponentComponentLoader';
protected function validatePlugin($plugin)
{
if (!$plugin instanceof Adapter) {
throw new ExceptionRuntimeException();
}
return true;
}
}
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : plugin loading
Utilisation
namespace MyComponent;
class Factory
{
/* Méthodes setBroker() and broker() */
public function get($adapter, array $options)
{
return $this->broker()
->load($adapter, $options);
}
}
24 © All rights reserved. Zend Technologies, Inc.
Zend Framework 2 :
améliorer la courbe d'apprentissage
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : création d'une
meilleure documentation
Reproches :
Options pas toujours documentées
Méthodes non présentées
Inconsistance entre les différents composants
Exemple souvent spécifiques au composant
Pas d'exemple pour une application complète
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : création d'une
meilleure documentation
Proposition :
Introduction
Démarrage rapide
Options
Méthodes
Exemples
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : revoir la consistance
de l'API
Reproches
Les méthodes magiques sont difficiles à
appréhender
On ne sait pas toujours comment et quand
étendre les composants
Certains concepts ne sont pas évidents à
comprendre (décorateurs Zend_Form)
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : revoir la consistance
de l'API
Proposition
Refactorisation quand les modèles d'utilisation
diffèrent des modèles de design
Réduire le nombre d'appels magiques
Revoir certaines API non claires
29 © All rights reserved. Zend Technologies, Inc.
Zend Framework 2 :
réécrire quand cela est nécessaire
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : gestion des
exceptions
Basé sur les exceptions SPL
Chaque composant possède son interface
Permet d'utiliser Exception dans tous les cas
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : gestion des
exceptions
// Interface
namespace ZendBarcode;
interface Exception{}
// Exception spécifique
namespace ZendBarcodeException;
use ZendBarcodeException;
class InvalidArgumentException extends InvalidArgumentException implements
Exception{}
// Utilisation
use ZendBarcodeException;
try {
// Faire qqch
} catch (ExceptionInvalidArgumentException $e) {
// Exception spécifique
} catch (Exception $e) {
// Interface du composant
} catch (Exception $e) {
// Exception générale
}
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : réécrire
ZendSession
Problèmes :
Boîte noire non testable
Stockage des espaces de noms incompatible
avec $_SESSION
Incompatibilités avec ext/session
Nouveau composant :
use ZendSessionSessionManager,
ZendSessionContainer as SessionContainer;
$manager = new SessionManager(array(//mes options));
$container = new SessionContainer('MonEspace', $manager);
$container['maCle'] = 'maValeur';
$container->setExpirationSeconds(60);
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : réécrire ZendDb
Problèmes :
Difficile de récupérer la couche de connexion
pour la partager entre les instances et les
classes
Difficile de récupérer les données du schéma
Difficile d'étendre
Difficile d'ajouter des tâches pre/post
Proposition :
▶ http://framework.zend.com/wiki/display/ZFDEV2/..
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : réécrire Filtres et
Validateurs
Problèmes :
Utilisation statique et en chaîne sont mixés au
sein du même objet
N'ont pas tous la même méthodologie dans le
chargement des plugins
Certains aspects requis par
Zend_Filter_Input ou Zend_Form ne sont
pas toujours supportés
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : réécrire Filtres et
Validateurs
Nouveaux composants :
namespace ZendValidator;
if (StaticValidator::execute($valeur, 'int')) {
// validation statique
}
$chaine = new ValidatorChain();
$chaine->addValidator(new StringLength(5, 5), true)
->addValidator(new PostCode('fr_FR'));
if ($chaine->isValid($valeur)) {
// validation en chaîne
}
36 © All rights reserved. Zend Technologies, Inc.
Zend Framework 2 :
où en est-on aujourd'hui ?
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : les étapes
Migration vers Git
Suppression require_once
Ajout des interfaces (sur classes abstraites)
Migration vers les espaces de noms
Additions SPL, SignalSlot
Réécriture de ZendSession
Zend Framework 2.0.0dev1
http://devzone.zend.com/article/12385-First-Development-Milestone-of-ZF-2.0-Released
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : les étapes
Refactorisation de l'autoloading et du chargement
des plugins
Refactorisation des exceptions
Réécriture de ZendView
Zend Framework 2.0.0dev2
http://framework.zend.com/announcements/2010-11-03-zf2dev2
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : la suite
●
Refactorisation MVC
●
Refactorisation I18N et L10N
●
Amélioration des tests
●
Documentation
●
Packaging
●
Outils de migration
© All rights reserved. Zend Technologies, Inc.
Zend Framework 2.0 : comment
contribuer ?
●
Wiki ZF2 : http://bit.ly/zf2wiki
●
Liste des contributeurs ZF :
zf-contributors-subscribe@lists.zend.com
●
IRC : #zftalk.dev on Freenode
●
Git
▶ git://git.zendframework.com/zf.git
▶ http://github.com/zendframework/zf2
41 © All rights reserved. Zend Technologies, Inc.
Merci
Questions ?
Talks : http://joind.in/event/view/518
Slideshare : http://www.slideshare.net/mikaelkael

Contenu connexe

Tendances

Build automatique et distribution OTA avec Xcode 4.x et Jenkins
Build automatique et distribution OTA avec Xcode 4.x et JenkinsBuild automatique et distribution OTA avec Xcode 4.x et Jenkins
Build automatique et distribution OTA avec Xcode 4.x et JenkinsCocoaHeads France
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache MavenArnaud Héritier
 
20100225 Ippon Osgi Are You Ready
20100225 Ippon Osgi Are You Ready20100225 Ippon Osgi Are You Ready
20100225 Ippon Osgi Are You ReadyGeoffray Gruel
 
Intégration continue & Qualité logicielle
Intégration continue & Qualité logicielleIntégration continue & Qualité logicielle
Intégration continue & Qualité logicielleDavid Buros
 
Presentation of GWT 2.4 (PDF version)
Presentation of GWT 2.4 (PDF version)Presentation of GWT 2.4 (PDF version)
Presentation of GWT 2.4 (PDF version)Celinio Fernandes
 
Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.Amélie DUVERNET
 
Presentation of GWT 2.4 (PowerPoint version)
Presentation of GWT 2.4 (PowerPoint version)Presentation of GWT 2.4 (PowerPoint version)
Presentation of GWT 2.4 (PowerPoint version)Celinio Fernandes
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootDNG Consulting
 
Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013Xavier NOPRE
 
Quand java prend de la vitesse, apache maven vous garde sur les rails
Quand java prend de la vitesse, apache maven vous garde sur les railsQuand java prend de la vitesse, apache maven vous garde sur les rails
Quand java prend de la vitesse, apache maven vous garde sur les railsArnaud Héritier
 
20080311 - Paris Vi Master STL TA - Initiation Maven
20080311 - Paris Vi Master STL TA - Initiation Maven20080311 - Paris Vi Master STL TA - Initiation Maven
20080311 - Paris Vi Master STL TA - Initiation MavenArnaud Héritier
 
Petit déjeuner OCTO Technology - Nouvelles Architectures Web Front-End et APIs
Petit déjeuner OCTO Technology - Nouvelles Architectures Web Front-End et APIsPetit déjeuner OCTO Technology - Nouvelles Architectures Web Front-End et APIs
Petit déjeuner OCTO Technology - Nouvelles Architectures Web Front-End et APIsOCTO Technology
 
Workshop Spring - Session 1 - L'offre Spring et les bases
Workshop Spring  - Session 1 - L'offre Spring et les basesWorkshop Spring  - Session 1 - L'offre Spring et les bases
Workshop Spring - Session 1 - L'offre Spring et les basesAntoine Rey
 
Partie 2: Angular
Partie 2: AngularPartie 2: Angular
Partie 2: AngularHabib Ayad
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache MavenArnaud Héritier
 

Tendances (20)

Build automatique et distribution OTA avec Xcode 4.x et Jenkins
Build automatique et distribution OTA avec Xcode 4.x et JenkinsBuild automatique et distribution OTA avec Xcode 4.x et Jenkins
Build automatique et distribution OTA avec Xcode 4.x et Jenkins
 
Support JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.YoussfiSupport JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.Youssfi
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven
 
Sonar-Hodson-Maven
Sonar-Hodson-MavenSonar-Hodson-Maven
Sonar-Hodson-Maven
 
20100225 Ippon Osgi Are You Ready
20100225 Ippon Osgi Are You Ready20100225 Ippon Osgi Are You Ready
20100225 Ippon Osgi Are You Ready
 
Intégration continue & Qualité logicielle
Intégration continue & Qualité logicielleIntégration continue & Qualité logicielle
Intégration continue & Qualité logicielle
 
Presentation of GWT 2.4 (PDF version)
Presentation of GWT 2.4 (PDF version)Presentation of GWT 2.4 (PDF version)
Presentation of GWT 2.4 (PDF version)
 
Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.
 
Presentation of GWT 2.4 (PowerPoint version)
Presentation of GWT 2.4 (PowerPoint version)Presentation of GWT 2.4 (PowerPoint version)
Presentation of GWT 2.4 (PowerPoint version)
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring Boot
 
Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013
 
Quand java prend de la vitesse, apache maven vous garde sur les rails
Quand java prend de la vitesse, apache maven vous garde sur les railsQuand java prend de la vitesse, apache maven vous garde sur les rails
Quand java prend de la vitesse, apache maven vous garde sur les rails
 
20080311 - Paris Vi Master STL TA - Initiation Maven
20080311 - Paris Vi Master STL TA - Initiation Maven20080311 - Paris Vi Master STL TA - Initiation Maven
20080311 - Paris Vi Master STL TA - Initiation Maven
 
Petit déjeuner OCTO Technology - Nouvelles Architectures Web Front-End et APIs
Petit déjeuner OCTO Technology - Nouvelles Architectures Web Front-End et APIsPetit déjeuner OCTO Technology - Nouvelles Architectures Web Front-End et APIs
Petit déjeuner OCTO Technology - Nouvelles Architectures Web Front-End et APIs
 
Maven
MavenMaven
Maven
 
Workshop Spring - Session 1 - L'offre Spring et les bases
Workshop Spring  - Session 1 - L'offre Spring et les basesWorkshop Spring  - Session 1 - L'offre Spring et les bases
Workshop Spring - Session 1 - L'offre Spring et les bases
 
Présentation OSGI
Présentation OSGIPrésentation OSGI
Présentation OSGI
 
Partie 2: Angular
Partie 2: AngularPartie 2: Angular
Partie 2: Angular
 
Spring & SpringBatch FR
Spring & SpringBatch FRSpring & SpringBatch FR
Spring & SpringBatch FR
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
 

En vedette

Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?Mickael Perraud
 
Découvrez le noyau d'internationalisation du Zend Framework
Découvrez le noyau d'internationalisation du Zend FrameworkDécouvrez le noyau d'internationalisation du Zend Framework
Découvrez le noyau d'internationalisation du Zend FrameworkMickael Perraud
 
Tirer parti des décorateurs de Zend_Form
Tirer parti des décorateurs de Zend_FormTirer parti des décorateurs de Zend_Form
Tirer parti des décorateurs de Zend_FormMickael Perraud
 
Développement sécurisé d'applications avec Zend Framework
Développement sécurisé d'applications avec Zend FrameworkDéveloppement sécurisé d'applications avec Zend Framework
Développement sécurisé d'applications avec Zend FrameworkMickael Perraud
 
Tester les applications Zend Framework
Tester les applications Zend FrameworkTester les applications Zend Framework
Tester les applications Zend FrameworkMickael Perraud
 
Présentation de DBAL en PHP (Nantes)
Présentation de DBAL en PHP (Nantes)Présentation de DBAL en PHP (Nantes)
Présentation de DBAL en PHP (Nantes)Mickael Perraud
 

En vedette (6)

Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?
 
Découvrez le noyau d'internationalisation du Zend Framework
Découvrez le noyau d'internationalisation du Zend FrameworkDécouvrez le noyau d'internationalisation du Zend Framework
Découvrez le noyau d'internationalisation du Zend Framework
 
Tirer parti des décorateurs de Zend_Form
Tirer parti des décorateurs de Zend_FormTirer parti des décorateurs de Zend_Form
Tirer parti des décorateurs de Zend_Form
 
Développement sécurisé d'applications avec Zend Framework
Développement sécurisé d'applications avec Zend FrameworkDéveloppement sécurisé d'applications avec Zend Framework
Développement sécurisé d'applications avec Zend Framework
 
Tester les applications Zend Framework
Tester les applications Zend FrameworkTester les applications Zend Framework
Tester les applications Zend Framework
 
Présentation de DBAL en PHP (Nantes)
Présentation de DBAL en PHP (Nantes)Présentation de DBAL en PHP (Nantes)
Présentation de DBAL en PHP (Nantes)
 

Similaire à Introduction à Zend Framework 2

ZendFramework2 - Présentation
ZendFramework2 - PrésentationZendFramework2 - Présentation
ZendFramework2 - Présentationjulien pauli
 
Afup 2015 zf3 le futur de php
Afup 2015   zf3 le futur de phpAfup 2015   zf3 le futur de php
Afup 2015 zf3 le futur de phpSophie Beaupuis
 
Utiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyUtiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyXavier Gorse
 
Symfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesSymfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesNoel GUILBERT
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonyVincent Composieux
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsJulien Wittouck
 
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)cornnery
 
Zend Framework 2
Zend Framework 2Zend Framework 2
Zend Framework 2epixelic
 
Aspect avec AspectJ
Aspect avec AspectJAspect avec AspectJ
Aspect avec AspectJsimeon
 
Introduction à Symfony2
Introduction à Symfony2Introduction à Symfony2
Introduction à Symfony2Hugo Hamon
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mareValtech
 
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniterAtsé François-Xavier KOBON
 
Architecture PHP 3 tier avec Zend en backend de Drupal
Architecture PHP 3 tier avec Zend en backend de DrupalArchitecture PHP 3 tier avec Zend en backend de Drupal
Architecture PHP 3 tier avec Zend en backend de DrupalThomas Delerm
 
Internationaliser un formulaire zend form
Internationaliser un formulaire zend formInternationaliser un formulaire zend form
Internationaliser un formulaire zend formGeozend
 
The Spring of Adobe Flex Remoting
The Spring of Adobe Flex RemotingThe Spring of Adobe Flex Remoting
The Spring of Adobe Flex RemotingFrançois Le Droff
 
Java dans Windows Azure, l'exemple de JOnAS
Java dans Windows Azure, l'exemple de JOnASJava dans Windows Azure, l'exemple de JOnAS
Java dans Windows Azure, l'exemple de JOnASGuillaume Sauthier
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logiciellecyrilgandon
 
NodeJS for Mobile App
NodeJS for Mobile AppNodeJS for Mobile App
NodeJS for Mobile AppHabib MAALEM
 

Similaire à Introduction à Zend Framework 2 (20)

ZendFramework2 - Présentation
ZendFramework2 - PrésentationZendFramework2 - Présentation
ZendFramework2 - Présentation
 
Afup 2015 zf3 le futur de php
Afup 2015   zf3 le futur de phpAfup 2015   zf3 le futur de php
Afup 2015 zf3 le futur de php
 
Utiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyUtiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec Symfony
 
Symfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesSymfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiques
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs Symfony
 
mini projet
mini projetmini projet
mini projet
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
 
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)
 
Zend Framework 2
Zend Framework 2Zend Framework 2
Zend Framework 2
 
Aspect avec AspectJ
Aspect avec AspectJAspect avec AspectJ
Aspect avec AspectJ
 
Introduction à Symfony2
Introduction à Symfony2Introduction à Symfony2
Introduction à Symfony2
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mare
 
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
 
Architecture PHP 3 tier avec Zend en backend de Drupal
Architecture PHP 3 tier avec Zend en backend de DrupalArchitecture PHP 3 tier avec Zend en backend de Drupal
Architecture PHP 3 tier avec Zend en backend de Drupal
 
PHP5 et Zend Framework
PHP5 et Zend FrameworkPHP5 et Zend Framework
PHP5 et Zend Framework
 
Internationaliser un formulaire zend form
Internationaliser un formulaire zend formInternationaliser un formulaire zend form
Internationaliser un formulaire zend form
 
The Spring of Adobe Flex Remoting
The Spring of Adobe Flex RemotingThe Spring of Adobe Flex Remoting
The Spring of Adobe Flex Remoting
 
Java dans Windows Azure, l'exemple de JOnAS
Java dans Windows Azure, l'exemple de JOnASJava dans Windows Azure, l'exemple de JOnAS
Java dans Windows Azure, l'exemple de JOnAS
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
NodeJS for Mobile App
NodeJS for Mobile AppNodeJS for Mobile App
NodeJS for Mobile App
 

Introduction à Zend Framework 2

  • 1. © All rights reserved. Zend Technologies, Inc. Introduction à Zend Framework 2 Mickaël Perraud
  • 2. © All rights reserved. Zend Technologies, Inc. Mickael Perraud Contributeur ZF depuis 2007 Responsable documentation française Travaille sur l'aide à la traduction et propose les versions déconnectées de la documentation PDF / CHM @mikaelkael / http://mikaelkael.fr
  • 3. 3 © All rights reserved. Zend Technologies, Inc. Zend Framework 2 : pourquoi ?
  • 4. © All rights reserved. Zend Technologies, Inc. Zend Framework jusqu'à aujourd'hui Annoncé en octobre 2005 Mars 2006 : v0.1 Juillet 2007 : v1.0 : MVC, Db, Acl, Auth Mars 2008 : v1.5 : Form, Layout, Context Avril 2009 : v1.8 : Application, Tool, Nav Juin 2010 : formation CRTeam Octobre 2010 : v1.11 : Cloud, UserAgent
  • 5. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 Don't think think
  • 6. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 « The primary thrust of ZF 2.0 is to make a more consistent, well-documented product, improving developer productivity and runtime performance. » Matthew Weier OʼPhinney
  • 7. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : buts principaux Améliorer l'extensibilité Améliorer les performances Améliorer la courbe d'apprentissage Réécrire quand cela est nécessaire
  • 8. 8 © All rights reserved. Zend Technologies, Inc. Zend Framework 2 : améliorer l'extensibilité
  • 9. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : améliorer l'extensibilité Suppression des Singletons Programmation par contrat : des interfaces au dessus des classes abstraites Suppression des dépendances codées en dur
  • 10. 10 © All rights reserved. Zend Technologies, Inc. Zend Framework 2 : améliorer les performances
  • 11. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : améliorer les performances
  • 12. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : améliorer les performances « Kill the magic! » Autoloading Chargement des plugins
  • 13. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : « kill the magic! » Exemple d'un view helper classique : echo $this->headLink()->appendStylesheet('foo.css'); /** * Lance Zend_View::__call() * Appelle Zend_View::getHelper() * Appelle Zend_View::_getPlugin() * Appelle Zend_Loader_PluginLoader::load() * Appelle Zend_Loader::isReadable() * Appelle call_user_func (hits autoloader...) * qui appelle Zend_Loader::loadClass * qui appelle Zend_Loader::loadFile * qui appelle include_once * Instanciation de l'helper * Appelle la méthode de l'helper via call_user_func_array() * Retourne l'instance de l'helper * Appelle la méthode de l'instance (lance __call...)) */
  • 14. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : « kill the magic! » Enlevons la magie : $this->broker('head_link') ->appendStylesheet('foo.css'); /** * Lance PhpRenderer::broker() * Appelle HelperBroker::load() * Appelle HelperLoader::load() * Lance autoloader * qui réalise un include_once * Instanciation de l'helper * Appelle la méthode de l'helper */ => La magie dégrade les performances
  • 15. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : « kill the magic! » Questions légitimes du débutant : C'est quoi view ? C'est défini où ? Où est le rendu dans tout ça ? Et les layouts ? class MonController extends Zend_Controller_Action { public function monAction() { $this->view->maVariable = 'maValeur'; } } => La magie rend l'apprentissage plus difficile
  • 16. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : autoloading Suppression des require_once Option 1 : ClassMapAutoloader - fichier de mapping Pré-compile un tableau de mapping pour tout ZF et par composant Outils pour générer le mapping Le plus efficace en terme de performances
  • 17. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : autoloading Option 1 : php classmap_generator.php Some/Directory/ // .classmap.php return array( 'FooSomeController' => __DIR__ . '/foo/controllers/SomeController.php', 'FooModelBar' => __DIR__ . '/foo/models/Bar.php', ); // ClassMapAutoloader require_once 'Zend/Loader/ClassMapAutoloader.php'; $loader = new ZendLoaderClassMapAutoloader('./.classmap.php'); $loader->register(); $bar = new FooModelBar();
  • 18. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : autoloading Option 2 : StandardAutoloader - un tableau explicite de paires namespaces => dossier Pas d'utilisation de l'include_path Flexibilité et performance au cours du développement Peut aussi agir en autoloader par défaut (s'appuie sur include_path)
  • 19. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : autoloading Option 2 : require_once 'Zend/Loader/StandardAutoloader.php'; $loader = new ZendLoaderStandardAutoloader(); $loader->registerNamespace('Mkk', APPLICATION_PATH . '/../library/Mkk'); $loader->registerPrefix('Doctrine', APPLICATION_PATH . '/../library/Doctrine'); // ceci n'est pas recommandé mais reste toutefois possible $loader->setFallbackAutoloader(true); $loader->register(); $foo = new MkkModelFoo();
  • 20. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : plugin loading Problèmes : L'autoloading basé sur une pile de chemins est lent La casse est importante Les solutions actuelles ne s'intéressent qu'à l'aspect chargement des classes L'instanciation est différente suivant les composants La persistance est différente suivant les composants
  • 21. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : plugin loading Solution Mapping avec alias par défaut namespace MyPlugins; use ZendLoaderPluginClassLoader; class ComponentLoader extends PluginClassLoader { protected $plugins = array( 'foo' => 'MyPluginsFoo', 'bar' => 'MyPluginsBar', 'foobar' => 'MyPluginsFooBar', ); }
  • 22. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : plugin loading Loaders couplés avec des Brokers Agissant comme un registre Permettant l'instanciation (avec arguments) namespace MyComponent; use ZendLoaderPluginClassLoader, ZendLoaderPluginBroker; class ComponentBroker extends PluginBroker { protected $defaultClassLoader = 'MyComponentComponentLoader'; protected function validatePlugin($plugin) { if (!$plugin instanceof Adapter) { throw new ExceptionRuntimeException(); } return true; } }
  • 23. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : plugin loading Utilisation namespace MyComponent; class Factory { /* Méthodes setBroker() and broker() */ public function get($adapter, array $options) { return $this->broker() ->load($adapter, $options); } }
  • 24. 24 © All rights reserved. Zend Technologies, Inc. Zend Framework 2 : améliorer la courbe d'apprentissage
  • 25. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : création d'une meilleure documentation Reproches : Options pas toujours documentées Méthodes non présentées Inconsistance entre les différents composants Exemple souvent spécifiques au composant Pas d'exemple pour une application complète
  • 26. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : création d'une meilleure documentation Proposition : Introduction Démarrage rapide Options Méthodes Exemples
  • 27. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : revoir la consistance de l'API Reproches Les méthodes magiques sont difficiles à appréhender On ne sait pas toujours comment et quand étendre les composants Certains concepts ne sont pas évidents à comprendre (décorateurs Zend_Form)
  • 28. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : revoir la consistance de l'API Proposition Refactorisation quand les modèles d'utilisation diffèrent des modèles de design Réduire le nombre d'appels magiques Revoir certaines API non claires
  • 29. 29 © All rights reserved. Zend Technologies, Inc. Zend Framework 2 : réécrire quand cela est nécessaire
  • 30. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : gestion des exceptions Basé sur les exceptions SPL Chaque composant possède son interface Permet d'utiliser Exception dans tous les cas
  • 31. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : gestion des exceptions // Interface namespace ZendBarcode; interface Exception{} // Exception spécifique namespace ZendBarcodeException; use ZendBarcodeException; class InvalidArgumentException extends InvalidArgumentException implements Exception{} // Utilisation use ZendBarcodeException; try { // Faire qqch } catch (ExceptionInvalidArgumentException $e) { // Exception spécifique } catch (Exception $e) { // Interface du composant } catch (Exception $e) { // Exception générale }
  • 32. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : réécrire ZendSession Problèmes : Boîte noire non testable Stockage des espaces de noms incompatible avec $_SESSION Incompatibilités avec ext/session Nouveau composant : use ZendSessionSessionManager, ZendSessionContainer as SessionContainer; $manager = new SessionManager(array(//mes options)); $container = new SessionContainer('MonEspace', $manager); $container['maCle'] = 'maValeur'; $container->setExpirationSeconds(60);
  • 33. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : réécrire ZendDb Problèmes : Difficile de récupérer la couche de connexion pour la partager entre les instances et les classes Difficile de récupérer les données du schéma Difficile d'étendre Difficile d'ajouter des tâches pre/post Proposition : ▶ http://framework.zend.com/wiki/display/ZFDEV2/..
  • 34. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : réécrire Filtres et Validateurs Problèmes : Utilisation statique et en chaîne sont mixés au sein du même objet N'ont pas tous la même méthodologie dans le chargement des plugins Certains aspects requis par Zend_Filter_Input ou Zend_Form ne sont pas toujours supportés
  • 35. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : réécrire Filtres et Validateurs Nouveaux composants : namespace ZendValidator; if (StaticValidator::execute($valeur, 'int')) { // validation statique } $chaine = new ValidatorChain(); $chaine->addValidator(new StringLength(5, 5), true) ->addValidator(new PostCode('fr_FR')); if ($chaine->isValid($valeur)) { // validation en chaîne }
  • 36. 36 © All rights reserved. Zend Technologies, Inc. Zend Framework 2 : où en est-on aujourd'hui ?
  • 37. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : les étapes Migration vers Git Suppression require_once Ajout des interfaces (sur classes abstraites) Migration vers les espaces de noms Additions SPL, SignalSlot Réécriture de ZendSession Zend Framework 2.0.0dev1 http://devzone.zend.com/article/12385-First-Development-Milestone-of-ZF-2.0-Released
  • 38. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : les étapes Refactorisation de l'autoloading et du chargement des plugins Refactorisation des exceptions Réécriture de ZendView Zend Framework 2.0.0dev2 http://framework.zend.com/announcements/2010-11-03-zf2dev2
  • 39. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : la suite ● Refactorisation MVC ● Refactorisation I18N et L10N ● Amélioration des tests ● Documentation ● Packaging ● Outils de migration
  • 40. © All rights reserved. Zend Technologies, Inc. Zend Framework 2.0 : comment contribuer ? ● Wiki ZF2 : http://bit.ly/zf2wiki ● Liste des contributeurs ZF : zf-contributors-subscribe@lists.zend.com ● IRC : #zftalk.dev on Freenode ● Git ▶ git://git.zendframework.com/zf.git ▶ http://github.com/zendframework/zf2
  • 41. 41 © All rights reserved. Zend Technologies, Inc. Merci Questions ? Talks : http://joind.in/event/view/518 Slideshare : http://www.slideshare.net/mikaelkael