Upload
sophie-beaupuis
View
1.804
Download
0
Embed Size (px)
Citation preview
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’uphttp://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 Interop\Container;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 lerouter:
'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 !