afup 2015 zf3 le futur de php

27
Confidential - © All rights reserved. Zend Technologies, Inc . 1 Confidential - © All rights reserved. Zend Technologies, Inc . Zend Framework 3 Le futur de PHP

Upload: sophie-beaupuis

Post on 16-Apr-2017

1.808 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Afup 2015   zf3 le futur de php

Confidential - © All rights reserved. Zend Technologies, Inc.1 Confidential - © All rights reserved. Zend Technologies, Inc.

Zend Framework 3

Le futur de PHP

Page 2: Afup 2015   zf3 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

Page 3: Afup 2015   zf3 le futur de php

Confidential - © All rights reserved. Zend Technologies, Inc.3

La nouvelle version : ZF3

Page 4: Afup 2015   zf3 le futur de php

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”

Page 5: Afup 2015   zf3 le futur de php

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.

Page 6: Afup 2015   zf3 le futur de php

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

Page 7: Afup 2015   zf3 le futur de php

Confidential - © All rights reserved. Zend Technologies, Inc.7

Le gestionnaire de services

Page 8: Afup 2015   zf3 le futur de php

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

Page 9: Afup 2015   zf3 le futur de php

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);}

Page 10: Afup 2015   zf3 le futur de php

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.

Page 11: Afup 2015   zf3 le futur de php

Confidential - © All rights reserved. Zend Technologies, Inc.11

Le gestionnaire d’évènements

Page 12: Afup 2015   zf3 le futur de php

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()

Page 13: Afup 2015   zf3 le futur de php

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)

Page 14: Afup 2015   zf3 le futur de php

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)

Page 15: Afup 2015   zf3 le futur de php

Confidential - © All rights reserved. Zend Technologies, Inc.15

Le modèle MVC

Page 16: Afup 2015   zf3 le futur de php

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”.

Page 17: Afup 2015   zf3 le futur de php

Confidential - © All rights reserved. Zend Technologies, Inc.17

Middlewares ? Vous avez dit middlewares ?

Page 18: Afup 2015   zf3 le futur de php

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” :

Page 19: Afup 2015   zf3 le futur de php

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,

... ], ], ],

Page 20: Afup 2015   zf3 le futur de php

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.

Page 21: Afup 2015   zf3 le futur de php

Confidential - © All rights reserved. Zend Technologies, Inc.21

PSR-7 middleware avec Zend

Page 22: Afup 2015   zf3 le futur de php

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

Page 23: Afup 2015   zf3 le futur de php

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();

Page 24: Afup 2015   zf3 le futur de php

Confidential - © All rights reserved. Zend Technologies, Inc.24

Zend Expressive

Page 25: Afup 2015   zf3 le futur de php

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..

Page 26: Afup 2015   zf3 le futur de php

Confidential - © All rights reserved. Zend Technologies, Inc.26

Un tout petit exemple

• Avec Composer• On choisit les composants

Page 27: Afup 2015   zf3 le futur de php

Confidential - © All rights reserved. Zend Technologies, Inc.27

Merci !