Mais conteúdo relacionado
Semelhante a Afup 2015 zf3 le futur de php (20)
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