SlideShare une entreprise Scribd logo
1  sur  33
Télécharger pour lire hors ligne
Introduction à
Zend Framework 2
{
2
2
Mickael Perraud & Julien Pauli
Contributeur ZF depuis 2007
Responsable documentation française
Donne des webinars sur ZF en partenariat avec Zend
Travaille sur l'aide à la traduction et propose les versions
déconnectées de la documentation PDF / CHM
@mikaelkael / http://mikaelkael.fr
Expert PHP avec une dizaine d'années d'expérience
Travaille dans l'opensource et contribue à certains projets
comme Zend Framework, Apache ou encore PHP lui-même
Travaille en conseil et formation chez AlterWay
Co-auteur de "Zend Framework, bien développer en PHP"
@julienPauli / http://julien-pauli.developpez.com/
3
ZF2 : pourquoi ?
{
4
4
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
5
Zend Framework 2.0
Don't think
think
{
6
6
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
7
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
ZF2 : améliorer l'extensibilité
{
9
9
ZF2.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
ZF2 : améliorer les performances
{
11
11
ZF2.0 : améliorer les performances
« Kill the magic! »
Autoloading
Chargement des plugins
{
12
12
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...))
*/
{
13
13
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
{
14
14
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
{
15
15
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
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();
{
16
16
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)
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();
{
17
17
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
{
18
18
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',
);
}
{
19
19
Zend Framework 2.0 : plugin loading
Loaders couplés avec des Brokers
Agissant comme un registre
Permettant l'instanciation (avec arguments)
Utilisation
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;
}
}
namespace MyComponent;
class Factory
{
/* Méthodes setBroker() and broker() */
public function get($adapter, array $options)
{
return $this->broker()
->load($adapter, $options);
}
}
20
ZF2 : améliorer la courbe
d'apprentissage
{
21
21
ZF2.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
Proposition :
Introduction
Démarrage rapide
Options
Méthodes
Exemples
{
22
22
ZF2.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)
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
23
Zend Framework 2.0 :
réécrire quand cela est nécessaire
{
24
24
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
// 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
}
{
25
25
Zend Framework 2.0 : réécrire Zend_Session
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);
{
26
26
Zend Framework 2.0 : réécrire Zend_Db
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/...
{
27
27
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
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
}
28
Zend Framework 2.0 :
où en est-on aujourd'hui ?
{
29
29
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 Zend_Session
Zend Framework 2.0.0dev1
http://devzone.zend.com/article/12385-First-Development-Milestone-of-ZF-2.0-Released
{
30
30
Zend Framework 2.0 : les étapes
Refactorisation de l'autoloading et du
chargement des plugins
Refactorisation des exceptions
Zend Framework 2.0.0dev2
http://framework.zend.com/announcements/2010-11-03-zf2dev2
{
31
31
Zend Framework 2.0 : la suite
●
Refactorisation MVC
●
Refactorisation I180 et L10N
●
Amélioration des tests
●
Documentation
●
Packaging
●
Outils de migration
{
32
32
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
33
Merci.
Questions ?
Talks : http://joind.in/talk/view/2094
Slideshare : http://www.slideshare.net/mikaelkael

Contenu connexe

Tendances

Symfony CQRS and _event_sourcing
Symfony CQRS and _event_sourcingSymfony CQRS and _event_sourcing
Symfony CQRS and _event_sourcingSymfonyMu
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications JavaAntoine Rey
 
Cours php & Mysql - 5éme partie
Cours php & Mysql - 5éme partieCours php & Mysql - 5éme partie
Cours php & Mysql - 5éme partiekadzaki
 
ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - CoursENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - CoursHoracio Gonzalez
 
Php 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVCPhp 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVCPierre Faure
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDOAbdoulaye Dieng
 
Mini projet individuel php
Mini projet individuel phpMini projet individuel php
Mini projet individuel phpKhadim Mbacké
 
Introduction à Angularjs
Introduction à AngularjsIntroduction à Angularjs
Introduction à AngularjsRossi Oddet
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Antoine Rey
 
Sécurité et Quaité de code PHP
Sécurité et Quaité de code PHPSécurité et Quaité de code PHP
Sécurité et Quaité de code PHPJean-Marie Renouard
 

Tendances (20)

Symfony CQRS and _event_sourcing
Symfony CQRS and _event_sourcingSymfony CQRS and _event_sourcing
Symfony CQRS and _event_sourcing
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
 
Cours php & Mysql - 5éme partie
Cours php & Mysql - 5éme partieCours php & Mysql - 5éme partie
Cours php & Mysql - 5éme partie
 
ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - CoursENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
 
Rapport tp1 j2ee
Rapport tp1 j2eeRapport tp1 j2ee
Rapport tp1 j2ee
 
Support programmation orientée objet c# .net version f8
Support programmation orientée objet c#  .net version f8Support programmation orientée objet c#  .net version f8
Support programmation orientée objet c# .net version f8
 
Php 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVCPhp 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVC
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
 
Mini projet individuel php
Mini projet individuel phpMini projet individuel php
Mini projet individuel php
 
De Java à .NET
De Java à .NETDe Java à .NET
De Java à .NET
 
MVC / Frameworks PHP
MVC / Frameworks PHPMVC / Frameworks PHP
MVC / Frameworks PHP
 
Servlets et JSP
Servlets et JSPServlets et JSP
Servlets et JSP
 
Introduction à Angularjs
Introduction à AngularjsIntroduction à Angularjs
Introduction à Angularjs
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?
 
Tp java ee.pptx
Tp java ee.pptxTp java ee.pptx
Tp java ee.pptx
 
Maven
MavenMaven
Maven
 
Sécurité et Quaité de code PHP
Sécurité et Quaité de code PHPSécurité et Quaité de code PHP
Sécurité et Quaité de code PHP
 
Configuration PHP5
Configuration PHP5Configuration PHP5
Configuration PHP5
 
Cours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweightCours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweight
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
 

En vedette

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
 
Tester les applications Zend Framework
Tester les applications Zend FrameworkTester les applications Zend Framework
Tester les applications Zend FrameworkMickael Perraud
 
Ley del-fideicomiso-para-inversión-en-educación,-paz-social-y-seguridad-ciuda...
Ley del-fideicomiso-para-inversión-en-educación,-paz-social-y-seguridad-ciuda...Ley del-fideicomiso-para-inversión-en-educación,-paz-social-y-seguridad-ciuda...
Ley del-fideicomiso-para-inversión-en-educación,-paz-social-y-seguridad-ciuda...Save Solutions
 
Fruition Sciences : une nouvelle façon de caractériser l'état hydrique de la ...
Fruition Sciences : une nouvelle façon de caractériser l'état hydrique de la ...Fruition Sciences : une nouvelle façon de caractériser l'état hydrique de la ...
Fruition Sciences : une nouvelle façon de caractériser l'état hydrique de la ...Qualiméditerranée
 
Evolucion de erp grupo2 056_b
Evolucion de erp grupo2 056_bEvolucion de erp grupo2 056_b
Evolucion de erp grupo2 056_bgabyetuto1
 
Presentación1
Presentación1Presentación1
Presentación1victorros
 
Ley de-expropiacion-y-de-ocupacion-de-bienes-por-el-estado
Ley de-expropiacion-y-de-ocupacion-de-bienes-por-el-estadoLey de-expropiacion-y-de-ocupacion-de-bienes-por-el-estado
Ley de-expropiacion-y-de-ocupacion-de-bienes-por-el-estadoSave Solutions
 
Un pequeño regalo de cumpleaños f
Un pequeño regalo de cumpleaños fUn pequeño regalo de cumpleaños f
Un pequeño regalo de cumpleaños fMICHELSEN305
 
Ley organica-de-la-superintendencia-del-sistema-financiero
Ley organica-de-la-superintendencia-del-sistema-financieroLey organica-de-la-superintendencia-del-sistema-financiero
Ley organica-de-la-superintendencia-del-sistema-financieroSave Solutions
 
Trab sistemas
Trab sistemasTrab sistemas
Trab sistemasromerini
 
Information zu Sirius CMS von Acolada
Information zu Sirius CMS von AcoladaInformation zu Sirius CMS von Acolada
Information zu Sirius CMS von Acoladaacolada_gmbh
 

En vedette (20)

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)
 
Tester les applications Zend Framework
Tester les applications Zend FrameworkTester les applications Zend Framework
Tester les applications Zend Framework
 
Ley del-fideicomiso-para-inversión-en-educación,-paz-social-y-seguridad-ciuda...
Ley del-fideicomiso-para-inversión-en-educación,-paz-social-y-seguridad-ciuda...Ley del-fideicomiso-para-inversión-en-educación,-paz-social-y-seguridad-ciuda...
Ley del-fideicomiso-para-inversión-en-educación,-paz-social-y-seguridad-ciuda...
 
Fruition Sciences : une nouvelle façon de caractériser l'état hydrique de la ...
Fruition Sciences : une nouvelle façon de caractériser l'état hydrique de la ...Fruition Sciences : une nouvelle façon de caractériser l'état hydrique de la ...
Fruition Sciences : une nouvelle façon de caractériser l'état hydrique de la ...
 
Evolucion de erp grupo2 056_b
Evolucion de erp grupo2 056_bEvolucion de erp grupo2 056_b
Evolucion de erp grupo2 056_b
 
Carnes
CarnesCarnes
Carnes
 
Presentación1
Presentación1Presentación1
Presentación1
 
Ley de-expropiacion-y-de-ocupacion-de-bienes-por-el-estado
Ley de-expropiacion-y-de-ocupacion-de-bienes-por-el-estadoLey de-expropiacion-y-de-ocupacion-de-bienes-por-el-estado
Ley de-expropiacion-y-de-ocupacion-de-bienes-por-el-estado
 
Ppt1
Ppt1Ppt1
Ppt1
 
Un pequeño regalo de cumpleaños f
Un pequeño regalo de cumpleaños fUn pequeño regalo de cumpleaños f
Un pequeño regalo de cumpleaños f
 
Educacion paraguay
Educacion paraguayEducacion paraguay
Educacion paraguay
 
Huevos
HuevosHuevos
Huevos
 
Ley organica-de-la-superintendencia-del-sistema-financiero
Ley organica-de-la-superintendencia-del-sistema-financieroLey organica-de-la-superintendencia-del-sistema-financiero
Ley organica-de-la-superintendencia-del-sistema-financiero
 
Trab sistemas
Trab sistemasTrab sistemas
Trab sistemas
 
Arroces
ArrocesArroces
Arroces
 
Ciudad de la Sombra - Dossier
Ciudad de la Sombra - DossierCiudad de la Sombra - Dossier
Ciudad de la Sombra - Dossier
 
Ma famille
Ma familleMa famille
Ma famille
 
Trabajo de sistemas 2
Trabajo de sistemas  2Trabajo de sistemas  2
Trabajo de sistemas 2
 
Aaaa
AaaaAaaa
Aaaa
 
Information zu Sirius CMS von Acolada
Information zu Sirius CMS von AcoladaInformation zu Sirius CMS von Acolada
Information zu Sirius CMS von Acolada
 

Similaire à Zf2 ce-qui-va-changer

ZendFramework2 - Présentation
ZendFramework2 - PrésentationZendFramework2 - Présentation
ZendFramework2 - Présentationjulien pauli
 
Utiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyUtiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyXavier Gorse
 
Réutilisabilité du code PHP
Réutilisabilité du code PHPRéutilisabilité du code PHP
Réutilisabilité du code PHPNicolas Le Nardou
 
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
 
Zend Framework 2
Zend Framework 2Zend Framework 2
Zend Framework 2epixelic
 
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
 
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
 
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
 
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
 
Atelier WordPress: Création d’extension WordPress
Atelier WordPress: Création d’extension WordPressAtelier WordPress: Création d’extension WordPress
Atelier WordPress: Création d’extension WordPressIZZA Samir
 
Symfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesSymfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesNoel GUILBERT
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hoodsvuillet
 
Introduction à Symfony2
Introduction à Symfony2Introduction à Symfony2
Introduction à Symfony2Hugo Hamon
 
démonstration code source site web ecole.docx
démonstration code source site web ecole.docxdémonstration code source site web ecole.docx
démonstration code source site web ecole.docxVincentBweka
 
Développement d’extensions WordPress
Développement d’extensions WordPressDéveloppement d’extensions WordPress
Développement d’extensions WordPressChi Nacim
 

Similaire à Zf2 ce-qui-va-changer (20)

ZendFramework2 - Présentation
ZendFramework2 - PrésentationZendFramework2 - Présentation
ZendFramework2 - Présentation
 
Utiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyUtiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec Symfony
 
mini projet
mini projetmini projet
mini projet
 
Réutilisabilité du code PHP
Réutilisabilité du code PHPRéutilisabilité du code PHP
Réutilisabilité du code PHP
 
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
 
Zend Framework 2
Zend Framework 2Zend Framework 2
Zend Framework 2
 
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
 
PHP5 et Zend Framework
PHP5 et Zend FrameworkPHP5 et Zend Framework
PHP5 et Zend Framework
 
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
 
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
 
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)
 
Atelier WordPress: Création d’extension WordPress
Atelier WordPress: Création d’extension WordPressAtelier WordPress: Création d’extension WordPress
Atelier WordPress: Création d’extension WordPress
 
Playing With PHP 5.3
Playing With PHP 5.3Playing With PHP 5.3
Playing With PHP 5.3
 
Php 5.3
Php 5.3Php 5.3
Php 5.3
 
Symfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesSymfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiques
 
Des tests modernes pour Drupal
Des tests modernes pour DrupalDes tests modernes pour Drupal
Des tests modernes pour Drupal
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hood
 
Introduction à Symfony2
Introduction à Symfony2Introduction à Symfony2
Introduction à Symfony2
 
démonstration code source site web ecole.docx
démonstration code source site web ecole.docxdémonstration code source site web ecole.docx
démonstration code source site web ecole.docx
 
Développement d’extensions WordPress
Développement d’extensions WordPressDéveloppement d’extensions WordPress
Développement d’extensions WordPress
 

Zf2 ce-qui-va-changer

  • 2. { 2 2 Mickael Perraud & Julien Pauli Contributeur ZF depuis 2007 Responsable documentation française Donne des webinars sur ZF en partenariat avec Zend Travaille sur l'aide à la traduction et propose les versions déconnectées de la documentation PDF / CHM @mikaelkael / http://mikaelkael.fr Expert PHP avec une dizaine d'années d'expérience Travaille dans l'opensource et contribue à certains projets comme Zend Framework, Apache ou encore PHP lui-même Travaille en conseil et formation chez AlterWay Co-auteur de "Zend Framework, bien développer en PHP" @julienPauli / http://julien-pauli.developpez.com/
  • 4. { 4 4 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
  • 6. { 6 6 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. { 7 7 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
  • 9. { 9 9 ZF2.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 ZF2 : améliorer les performances
  • 11. { 11 11 ZF2.0 : améliorer les performances « Kill the magic! » Autoloading Chargement des plugins
  • 12. { 12 12 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...)) */
  • 13. { 13 13 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
  • 14. { 14 14 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
  • 15. { 15 15 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 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();
  • 16. { 16 16 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) 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();
  • 17. { 17 17 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
  • 18. { 18 18 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', ); }
  • 19. { 19 19 Zend Framework 2.0 : plugin loading Loaders couplés avec des Brokers Agissant comme un registre Permettant l'instanciation (avec arguments) Utilisation 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; } } namespace MyComponent; class Factory { /* Méthodes setBroker() and broker() */ public function get($adapter, array $options) { return $this->broker() ->load($adapter, $options); } }
  • 20. 20 ZF2 : améliorer la courbe d'apprentissage
  • 21. { 21 21 ZF2.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 Proposition : Introduction Démarrage rapide Options Méthodes Exemples
  • 22. { 22 22 ZF2.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) 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
  • 23. 23 Zend Framework 2.0 : réécrire quand cela est nécessaire
  • 24. { 24 24 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 // 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 }
  • 25. { 25 25 Zend Framework 2.0 : réécrire Zend_Session 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);
  • 26. { 26 26 Zend Framework 2.0 : réécrire Zend_Db 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/...
  • 27. { 27 27 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 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 }
  • 28. 28 Zend Framework 2.0 : où en est-on aujourd'hui ?
  • 29. { 29 29 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 Zend_Session Zend Framework 2.0.0dev1 http://devzone.zend.com/article/12385-First-Development-Milestone-of-ZF-2.0-Released
  • 30. { 30 30 Zend Framework 2.0 : les étapes Refactorisation de l'autoloading et du chargement des plugins Refactorisation des exceptions Zend Framework 2.0.0dev2 http://framework.zend.com/announcements/2010-11-03-zf2dev2
  • 31. { 31 31 Zend Framework 2.0 : la suite ● Refactorisation MVC ● Refactorisation I180 et L10N ● Amélioration des tests ● Documentation ● Packaging ● Outils de migration
  • 32. { 32 32 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