SlideShare uma empresa Scribd logo
1 de 27
Confidential - © All rights reserved. Zend Technologies, Inc.1
Confidential - © All rights reserved. Zend Technologies, Inc.
Zend Framework 3
Le futur de PHP
Confidential - © All rights reserved. Zend Technologies, Inc.2
Twitter
@so_php_ie
Paris Zend Framework Meet’up
http://www.meetup.com/fr/Paris-Zend-Framework-Meetup/
Moi, moi et moi...
Twitter
@venusZeDog
Confidential - © All rights reserved. Zend Technologies, Inc.3
La nouvelle version : ZF3
Confidential - © All rights reserved. Zend Technologies, Inc.4
Objectifs de ZF3
• Séparation du framework en composants réutilisables
• Performances
• Facilité d’utilisation
• Centré sur PSR7 et les “middlewares”
Confidential - © All rights reserved. Zend Technologies, Inc.5
Séparation du framework en différents composants
Réalisé depuis ZF2.5:
• Chaque composant possède sont propre repository
• Chaque élément est versionné de façon indépendante
• Le package du framework devient un méta-package faisant références à différentes versions
des composants.
But
• Laissé au composant la possibilité d’évoluer à son rythme
• Faciliter la répartition des responsabilités des source managers.
Confidential - © All rights reserved. Zend Technologies, Inc.6
Qu’est-ce qui change avec ZF2 ?
• Le gestionnaire de services
• Le gestionnaire d’évènements
• Le composant MVC en conséquence des deux précédentes modifications
Confidential - © All rights reserved. Zend Technologies, Inc.7
Le gestionnaire de services
Confidential - © All rights reserved. Zend Technologies, Inc.8
Le gestionnaire de service
• Désormais compatible avec container-interop
• 4 x plus rapide
• Reste compatible avec la version ZF2 pour la plus grande partie
• Disparition du peering entre gestionnaires
• Suppression des noms canoniques
Confidential - © All rights reserved. Zend Technologies, Inc.9
Le gestionnaire de service - container interop
C’est un projet qui propose une interface générale pour tous les containers d’injection en PHP.
Pas encadré par le FIG pour le moment.
namespace InteropContainer;
interface ContainerInterface
{
public function get($id);
public function has($id);
}
Confidential - © All rights reserved. Zend Technologies, Inc.10
Le gestionnaire de service - nouvelle interface pour les factories
interface FactoryInterface
{
public function __invoke(ContainerInterface $container, $requestedName, array $options = null);
On peut donc utiliser désormais la même factory pour différents services car le nom du service est
passé en paramètre.
Confidential - © All rights reserved. Zend Technologies, Inc.11
Le gestionnaire d’évènements
Confidential - © All rights reserved. Zend Technologies, Inc.12
Gestionnaire d’évènements
• Au moins 4x plus rapide
• Enfin débarassé du polymorphisme de paramètres pour trigger()
Confidential - © All rights reserved. Zend Technologies, Inc.13
Gestionnaire d’évènements - Adieu “trigger” pourri...
Emettre une notification à partir de ses éléments :
public function trigger($eventName, $target = null, $argv = [])
Si on souhaite ajouter une fonction de “callback” de gestion de propagation :
public function triggerUntil(callable $callback, $eventName, $target = null, $argv = [])
Emmettre une notification déjà instanciée:
public function triggerEvent(EventInterface $event)
Avec une fonction de callback :
public function triggerEventUntil(callable $callback, EventInterface $event)
Confidential - © All rights reserved. Zend Technologies, Inc.14
Gestionnaire d’évènements - Attachement des aggrégats
Désormais impossible d’attacher un aggregat à travers le gestionnaire d’évènement:
$eventManager->attachAggregate(ListenerAggregate $aggregate)
On doit désormais utiliser :
$aggregate->attach(EventManager $events)
Confidential - © All rights reserved. Zend Technologies, Inc.15
Le modèle MVC
Confidential - © All rights reserved. Zend Technologies, Inc.16
MCV - Ce qui change
• Conséquences des changements sur le gestionnaire de services
• Conséquences des changements sur le gestionnaire d’évènements
• En gros… pas de rupture de compatbilité.
• NOUVEAU : le support des “middlewares”.
Confidential - © All rights reserved. Zend Technologies, Inc.17
Middlewares ? Vous avez dit middlewares ?
Confidential - © All rights reserved. Zend Technologies, Inc.18
Kezako ?
• Un middleware est un élément de code qui traite une requête et renvoie une réponse.
• les middlewares sont généralement utilisés en “couches” :
Confidential - © All rights reserved. Zend Technologies, Inc.19
Que vient faire Zend Framework là dedans ?
On peut appeler un middleware en remplacement d’un controller. Il suffit de le définir dans le
router:
'mwRoute' => [
'type' => 'literal',
'options' => [
'route' => '/myMiddleWare',
'defaults' => [
'middleware' => myMiddleWare::class,
...
],
],
],
Confidential - © All rights reserved. Zend Technologies, Inc.20
Comment coder un middleware dans ZF ?
• C’est un callable quelconque
– qui reçoit en entrée un requête compatible avec PSR-7
– qui renvoie un réponse compatible avec PSR-7
• Ce middleware n’est donc pas forcément une implémentation “Zend”. Il suffit qu’il soit compatible
avec la norme PSR-7.
Confidential - © All rights reserved. Zend Technologies, Inc.21
PSR-7 middleware avec Zend
Confidential - © All rights reserved. Zend Technologies, Inc.22
le composant zend-diactoros
• implémentation Zend de la norme PSR-7
• propose des classes de requêtes et de réponses suivant la norme PSR-7
Confidential - © All rights reserved. Zend Technologies, Inc.23
le composant zend-strategility
• Implemente les middlewares selon la norme PSR-7
• un middleware est une fonction qui possède en paramètres
– une requête PSR-7
– une réponse PSR-7
$pipe = new MiddlewarePipe();
$server = Server::createServer($pipe, $_SERVER, $_GET, $_POST, $_COOKIE, $_FILES);
$pipe->pipe('/bidule',function($req, $rep){
$rep->write('hop');
return $rep;
});
$server->listen();
Confidential - © All rights reserved. Zend Technologies, Inc.24
Zend Expressive
Confidential - © All rights reserved. Zend Technologies, Inc.25
L’objectif
• Créer un micro-framework en associant
– Un middleware compatible PSR-7 (Zend Stratigility)
– Un router
– Un container d’injection
• en favorisant l’interopérabilité
– PSR7
– Container Interop..
Confidential - © All rights reserved. Zend Technologies, Inc.26
Un tout petit exemple
• Avec Composer
• On choisit les composants
Confidential - © All rights reserved. Zend Technologies, Inc.27
Merci !

Mais conteúdo relacionado

Destaque (20)

Temps
TempsTemps
Temps
 
Xfastfood
XfastfoodXfastfood
Xfastfood
 
Place du tertre
Place du tertrePlace du tertre
Place du tertre
 
Educacion hombre
Educacion hombreEducacion hombre
Educacion hombre
 
Rapport annuel 2009 2010
Rapport annuel 2009 2010Rapport annuel 2009 2010
Rapport annuel 2009 2010
 
Les roses recordades
Les roses recordadesLes roses recordades
Les roses recordades
 
El meu poble i jo
El meu poble i joEl meu poble i jo
El meu poble i jo
 
Instal.lació M.Petra
Instal.lació M.PetraInstal.lació M.Petra
Instal.lació M.Petra
 
Logo perfecto
Logo perfectoLogo perfecto
Logo perfecto
 
Transport
TransportTransport
Transport
 
Les métiers de l'internet - Référentiel APEC 2012
Les métiers de l'internet - Référentiel APEC 2012Les métiers de l'internet - Référentiel APEC 2012
Les métiers de l'internet - Référentiel APEC 2012
 
Estrategias de desarrollo en sharepoint
Estrategias de desarrollo en sharepointEstrategias de desarrollo en sharepoint
Estrategias de desarrollo en sharepoint
 
French tech-grenoble
French tech-grenobleFrench tech-grenoble
French tech-grenoble
 
Dejeuner Gratte Ciel 1930 A
Dejeuner Gratte Ciel 1930 ADejeuner Gratte Ciel 1930 A
Dejeuner Gratte Ciel 1930 A
 
Gestion fortune 11 2014
Gestion fortune 11 2014Gestion fortune 11 2014
Gestion fortune 11 2014
 
Diapo milgram v3.0
Diapo milgram v3.0Diapo milgram v3.0
Diapo milgram v3.0
 
Cadre stratégique fédéral pour des marchés publics durables
Cadre stratégique fédéral pour des marchés publics durablesCadre stratégique fédéral pour des marchés publics durables
Cadre stratégique fédéral pour des marchés publics durables
 
Crear una cuenta en gmail
Crear una cuenta en gmailCrear una cuenta en gmail
Crear una cuenta en gmail
 
La newsletter de mgrh 18
La newsletter de mgrh 18La newsletter de mgrh 18
La newsletter de mgrh 18
 
Compte rendu du Conseil Municipal du 19 décembre 2014
Compte rendu du Conseil Municipal du 19 décembre 2014Compte rendu du Conseil Municipal du 19 décembre 2014
Compte rendu du Conseil Municipal du 19 décembre 2014
 

Semelhante a 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 SymfonyXavier Gorse
 
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
 
Réutilisabilité du code PHP
Réutilisabilité du code PHPRéutilisabilité du code PHP
Réutilisabilité du code PHPNicolas Le Nardou
 
Symfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesSymfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesNoel GUILBERT
 
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier KrantzOps@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier KrantzOlivier DASINI
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonyVincent Composieux
 
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
 
Déploiement pour l’hébergement d’architecture cliente et mise en place du Sel...
Déploiement pour l’hébergement d’architecture cliente et mise en place du Sel...Déploiement pour l’hébergement d’architecture cliente et mise en place du Sel...
Déploiement pour l’hébergement d’architecture cliente et mise en place du Sel...OpenNebula Project
 
20111220 lyon jug-packaging-natif
20111220 lyon jug-packaging-natif20111220 lyon jug-packaging-natif
20111220 lyon jug-packaging-natifHenri Gomez
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logiciellecyrilgandon
 
S43 passer à php 7 sous IBM i
S43   passer à php 7 sous IBM iS43   passer à php 7 sous IBM i
S43 passer à php 7 sous IBM iGautier DUMAS
 
20120110 paris jug-packaging-natif
20120110 paris jug-packaging-natif20120110 paris jug-packaging-natif
20120110 paris jug-packaging-natifHenri Gomez
 
PHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_ExtensionsPHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_Extensionsjulien pauli
 
Les architectures du Software Defined Storage
Les architectures du Software Defined StorageLes architectures du Software Defined Storage
Les architectures du Software Defined StorageRSD
 
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
 
Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?Microsoft
 
Internationaliser un formulaire zend form
Internationaliser un formulaire zend formInternationaliser un formulaire zend form
Internationaliser un formulaire zend formGeozend
 
20100221 my phingtool - blog
20100221   my phingtool - blog20100221   my phingtool - blog
20100221 my phingtool - blogPHPPRO
 

Semelhante a Afup 2015 zf3 le futur de php (20)

Utiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyUtiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec Symfony
 
Zf2 ce-qui-va-changer
Zf2 ce-qui-va-changerZf2 ce-qui-va-changer
Zf2 ce-qui-va-changer
 
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
 
Réutilisabilité du code PHP
Réutilisabilité du code PHPRéutilisabilité du code PHP
Réutilisabilité du code PHP
 
Symfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesSymfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiques
 
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier KrantzOps@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs Symfony
 
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)
 
Déploiement pour l’hébergement d’architecture cliente et mise en place du Sel...
Déploiement pour l’hébergement d’architecture cliente et mise en place du Sel...Déploiement pour l’hébergement d’architecture cliente et mise en place du Sel...
Déploiement pour l’hébergement d’architecture cliente et mise en place du Sel...
 
20111220 lyon jug-packaging-natif
20111220 lyon jug-packaging-natif20111220 lyon jug-packaging-natif
20111220 lyon jug-packaging-natif
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
S43 passer à php 7 sous IBM i
S43   passer à php 7 sous IBM iS43   passer à php 7 sous IBM i
S43 passer à php 7 sous IBM i
 
20120110 paris jug-packaging-natif
20120110 paris jug-packaging-natif20120110 paris jug-packaging-natif
20120110 paris jug-packaging-natif
 
PHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_ExtensionsPHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_Extensions
 
Les architectures du Software Defined Storage
Les architectures du Software Defined StorageLes architectures du Software Defined Storage
Les architectures du Software Defined Storage
 
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
 
Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?
 
Internationaliser un formulaire zend form
Internationaliser un formulaire zend formInternationaliser un formulaire zend form
Internationaliser un formulaire zend form
 
mini projet
mini projetmini projet
mini projet
 
20100221 my phingtool - blog
20100221   my phingtool - blog20100221   my phingtool - blog
20100221 my phingtool - blog
 

Afup 2015 zf3 le futur de php

  • 1. Confidential - © All rights reserved. Zend Technologies, Inc.1 Confidential - © All rights reserved. Zend Technologies, Inc. Zend Framework 3 Le futur de PHP
  • 2. Confidential - © All rights reserved. Zend Technologies, Inc.2 Twitter @so_php_ie Paris Zend Framework Meet’up http://www.meetup.com/fr/Paris-Zend-Framework-Meetup/ Moi, moi et moi... Twitter @venusZeDog
  • 3. Confidential - © All rights reserved. Zend Technologies, Inc.3 La nouvelle version : ZF3
  • 4. Confidential - © All rights reserved. Zend Technologies, Inc.4 Objectifs de ZF3 • Séparation du framework en composants réutilisables • Performances • Facilité d’utilisation • Centré sur PSR7 et les “middlewares”
  • 5. Confidential - © All rights reserved. Zend Technologies, Inc.5 Séparation du framework en différents composants Réalisé depuis ZF2.5: • Chaque composant possède sont propre repository • Chaque élément est versionné de façon indépendante • Le package du framework devient un méta-package faisant références à différentes versions des composants. But • Laissé au composant la possibilité d’évoluer à son rythme • Faciliter la répartition des responsabilités des source managers.
  • 6. Confidential - © All rights reserved. Zend Technologies, Inc.6 Qu’est-ce qui change avec ZF2 ? • Le gestionnaire de services • Le gestionnaire d’évènements • Le composant MVC en conséquence des deux précédentes modifications
  • 7. Confidential - © All rights reserved. Zend Technologies, Inc.7 Le gestionnaire de services
  • 8. Confidential - © All rights reserved. Zend Technologies, Inc.8 Le gestionnaire de service • Désormais compatible avec container-interop • 4 x plus rapide • Reste compatible avec la version ZF2 pour la plus grande partie • Disparition du peering entre gestionnaires • Suppression des noms canoniques
  • 9. Confidential - © All rights reserved. Zend Technologies, Inc.9 Le gestionnaire de service - container interop C’est un projet qui propose une interface générale pour tous les containers d’injection en PHP. Pas encadré par le FIG pour le moment. namespace InteropContainer; interface ContainerInterface { public function get($id); public function has($id); }
  • 10. Confidential - © All rights reserved. Zend Technologies, Inc.10 Le gestionnaire de service - nouvelle interface pour les factories interface FactoryInterface { public function __invoke(ContainerInterface $container, $requestedName, array $options = null); On peut donc utiliser désormais la même factory pour différents services car le nom du service est passé en paramètre.
  • 11. Confidential - © All rights reserved. Zend Technologies, Inc.11 Le gestionnaire d’évènements
  • 12. Confidential - © All rights reserved. Zend Technologies, Inc.12 Gestionnaire d’évènements • Au moins 4x plus rapide • Enfin débarassé du polymorphisme de paramètres pour trigger()
  • 13. Confidential - © All rights reserved. Zend Technologies, Inc.13 Gestionnaire d’évènements - Adieu “trigger” pourri... Emettre une notification à partir de ses éléments : public function trigger($eventName, $target = null, $argv = []) Si on souhaite ajouter une fonction de “callback” de gestion de propagation : public function triggerUntil(callable $callback, $eventName, $target = null, $argv = []) Emmettre une notification déjà instanciée: public function triggerEvent(EventInterface $event) Avec une fonction de callback : public function triggerEventUntil(callable $callback, EventInterface $event)
  • 14. Confidential - © All rights reserved. Zend Technologies, Inc.14 Gestionnaire d’évènements - Attachement des aggrégats Désormais impossible d’attacher un aggregat à travers le gestionnaire d’évènement: $eventManager->attachAggregate(ListenerAggregate $aggregate) On doit désormais utiliser : $aggregate->attach(EventManager $events)
  • 15. Confidential - © All rights reserved. Zend Technologies, Inc.15 Le modèle MVC
  • 16. Confidential - © All rights reserved. Zend Technologies, Inc.16 MCV - Ce qui change • Conséquences des changements sur le gestionnaire de services • Conséquences des changements sur le gestionnaire d’évènements • En gros… pas de rupture de compatbilité. • NOUVEAU : le support des “middlewares”.
  • 17. Confidential - © All rights reserved. Zend Technologies, Inc.17 Middlewares ? Vous avez dit middlewares ?
  • 18. Confidential - © All rights reserved. Zend Technologies, Inc.18 Kezako ? • Un middleware est un élément de code qui traite une requête et renvoie une réponse. • les middlewares sont généralement utilisés en “couches” :
  • 19. Confidential - © All rights reserved. Zend Technologies, Inc.19 Que vient faire Zend Framework là dedans ? On peut appeler un middleware en remplacement d’un controller. Il suffit de le définir dans le router: 'mwRoute' => [ 'type' => 'literal', 'options' => [ 'route' => '/myMiddleWare', 'defaults' => [ 'middleware' => myMiddleWare::class, ... ], ], ],
  • 20. Confidential - © All rights reserved. Zend Technologies, Inc.20 Comment coder un middleware dans ZF ? • C’est un callable quelconque – qui reçoit en entrée un requête compatible avec PSR-7 – qui renvoie un réponse compatible avec PSR-7 • Ce middleware n’est donc pas forcément une implémentation “Zend”. Il suffit qu’il soit compatible avec la norme PSR-7.
  • 21. Confidential - © All rights reserved. Zend Technologies, Inc.21 PSR-7 middleware avec Zend
  • 22. Confidential - © All rights reserved. Zend Technologies, Inc.22 le composant zend-diactoros • implémentation Zend de la norme PSR-7 • propose des classes de requêtes et de réponses suivant la norme PSR-7
  • 23. Confidential - © All rights reserved. Zend Technologies, Inc.23 le composant zend-strategility • Implemente les middlewares selon la norme PSR-7 • un middleware est une fonction qui possède en paramètres – une requête PSR-7 – une réponse PSR-7 $pipe = new MiddlewarePipe(); $server = Server::createServer($pipe, $_SERVER, $_GET, $_POST, $_COOKIE, $_FILES); $pipe->pipe('/bidule',function($req, $rep){ $rep->write('hop'); return $rep; }); $server->listen();
  • 24. Confidential - © All rights reserved. Zend Technologies, Inc.24 Zend Expressive
  • 25. Confidential - © All rights reserved. Zend Technologies, Inc.25 L’objectif • Créer un micro-framework en associant – Un middleware compatible PSR-7 (Zend Stratigility) – Un router – Un container d’injection • en favorisant l’interopérabilité – PSR7 – Container Interop..
  • 26. Confidential - © All rights reserved. Zend Technologies, Inc.26 Un tout petit exemple • Avec Composer • On choisit les composants
  • 27. Confidential - © All rights reserved. Zend Technologies, Inc.27 Merci !