Zend Framework 2

42
Intervenant: Benoît DURAND b.durand at epixelic dot com Zend Framework 2 (beta2) 21/12/2011 Développement

description

Les nouveautés ZF2 par rapport à ZF1

Transcript of Zend Framework 2

Page 1: Zend Framework 2

Intervenant: Benoît DURAND b.durand at epixelic dot com

Zend Framework 2(beta2)

21/12/2011 Développement

Page 2: Zend Framework 2

Architecture

Page 3: Zend Framework 2

ZF2 3

L’architecture de ZF1

1. Singletons2. Registres3. Dépendances codées « en dur »

21/12/2011

Page 4: Zend Framework 2

ZF2 4

Un nouveau cœur pour ZF2

1. Programmation orientée aspect2. SOLID3. Exploiter pleinement le protocole HTTP

21/12/2011

Page 5: Zend Framework 2

Autoload

Page 6: Zend Framework 2

ZF2 6

Autoload

1. Suppression des appels à require_once

21/12/2011

Page 7: Zend Framework 2

ZF2 7

Autoload

1. Suppression des appels à require_once2. Compatible PSR-0

21/12/2011

Page 8: Zend Framework 2

ZF2 8

Autoload

1. Suppression des appels à require_once2. Compatible PSR-03. Chargement par namespace, et par préfix

21/12/2011

Page 9: Zend Framework 2

ZF2 9

Autoload

1. Suppression des appels à require_once2. Compatible PSR-03. Chargement par namespace, et par préfix4. Chargement avec une classmap

21/12/2011

Page 10: Zend Framework 2

ZF2 10

Autoload

1. Suppression des appels à require_once2. Compatible PSR-03. Chargement par namespace, et par préfix4. Chargement avec une classmap

21/12/2011

Gain à l’exécution

+25% de base

+60 à 85% avec du cache d’opcode

Page 11: Zend Framework 2

Injection de dépendances

Page 12: Zend Framework 2

ZF2 12

Injection de dépendances

• Découpler les dépendances entre deux composants

• Respecter la séparation des responsabilités

21/12/2011

Page 13: Zend Framework 2

ZF2 13

Di : exemple (1)

// Dépendance forteclass Paginator{ public function __construct() { $this->adapter = new Array(); }}

21/12/2011

Page 14: Zend Framework 2

ZF2 14

Di : exemple (2)

// Dépendance faibleclass Paginator{ public function __construct(Adapter $adapter) { $this->adapter = $adapter; }}

21/12/2011

Page 15: Zend Framework 2

ZF2 15

Di : trois types de définitions

1. Constructeur2. Setter3. Annotation

21/12/2011

Page 16: Zend Framework 2

ZF2 16

Di : trois stratégies

1. A l’exécution2. Par compilation3. Builder

21/12/2011

Page 17: Zend Framework 2

Gestion par évènements

Page 18: Zend Framework 2

ZF2 18

Vocabulaire

1. Un event est une action2. Un listener est une fonction qui peut réagir à

un event3. Un EventManager est un objet qui agrège

des listeners pour un ou plusieurs events, et qui déclenche ces events

21/12/2011

Page 19: Zend Framework 2

ZF2 19

EventManager : exemple

use Zend\EventManager\EventManager;

$events = new EventManager;$events->attach(‘do’, function($e) { printf(‘Evènement %s avec les paramètres %s’, $e->getName(), json_encode($e->getParams()) );});

$params = array(‘foo’ => ‘bar’, ‘baz’ => ‘bat’);$events->trigger(‘do’, null, $params);// Affiche Evènement do avec les paramètres {"foo":"bar","baz":"bat"}

21/12/2011

Page 20: Zend Framework 2

MVC

Page 21: Zend Framework 2

ZF2 21

Architecture

• Une application est composée d’un router, d’un locator, et d’un event manager

• Une route doit retourner le nom d’un contrôleur

• Le contrôleur est récupéré depuis le locator, et exécuté

• Route et dispatch sont deux events

21/12/2011

Page 22: Zend Framework 2

ZF2 22

Gotta dispatch them all

• Applications MVC

21/12/2011

Page 23: Zend Framework 2

ZF2 23

Gotta dispatch them all

• Applications MVC• Classes serveur (Amf, Json, Soap, XmlRpc)

21/12/2011

Page 24: Zend Framework 2

ZF2 24

Gotta dispatch them all

• Applications MVC• Classes serveur (Amf, Json, Soap, XmlRpc)• Clients HTTP

21/12/2011

Page 25: Zend Framework 2

Modules

Page 26: Zend Framework 2

ZF2 26

Définition

« Un module est un ensemble de classeset d’autres fichiers qui résout

un problème spécifiqueau sein d’une application métier. »

ZF2 RFC

21/12/2011

Page 27: Zend Framework 2

ZF2 27

Architecture

• C’est l’unité de base d’une application MVC ZF2

21/12/2011

Page 28: Zend Framework 2

ZF2 28

Architecture

• C’est l’unité de base d’une application MVC ZF2

• C’est simple à créer :– Un espace de nom

21/12/2011

Page 29: Zend Framework 2

ZF2 29

Architecture

• C’est l’unité de base d’une application MVC ZF2

• C’est simple à créer :– Un espace de nom– Une seule classe obligatoire : Module

21/12/2011

Page 30: Zend Framework 2

ZF2 30

Exemple

// modules/EpxBlog/Module.phpnamespace EpxBlog;

class Module {}

21/12/2011

Page 31: Zend Framework 2

ZF2 31

Module.php : cas d’utilisation

// modules/EpxBlog/Module.phpnamespace EpxBlog;

class Module{ // Chargement automatique des ressources public function getAutoloaderConfig() {}

// Configuration de base du module public function getConfig() {}}21/12/2011

Page 32: Zend Framework 2

ZF2 32

Que contient un module ?

• Du code PHP (avec ou sans MVC)

21/12/2011

Page 33: Zend Framework 2

ZF2 33

Que contient un module ?

• Du code PHP (avec ou sans MVC)• Des fichiers statiques (styles, javascript,

images, etc)

21/12/2011

Page 34: Zend Framework 2

ZF2 34

Que contient un module ?

• Du code PHP (avec ou sans MVC)• Des fichiers statiques (styles, javascript,

images, etc)• Des tests unitaires

21/12/2011

Page 35: Zend Framework 2

ZF2 35

Que contient un module ?

• Du code PHP (avec ou sans MVC)• Des fichiers statiques (styles, javascript,

images, etc)• Des tests unitaires• La documentation

21/12/2011

Page 36: Zend Framework 2

ZF2 36

Que contient un module ?

• Du code PHP (avec ou sans MVC)• Des fichiers statiques (styles, javascript,

images, etc)• Des tests unitaires• La documentation• Ce que vous voulez

21/12/2011

Page 37: Zend Framework 2

ZF2 37

Contrôleur

namespace EpxBlog\Controller;

use Zend\Mvc\Controller\ActionController;

class ArticleController extends ActionController{ public function viewAction() { $query = $this->getRequest()->query(); return array('titre' => $query->get('slug')); }}

21/12/2011

Page 38: Zend Framework 2

ZF2 38

Vueuse Zend\EventManager\EventCollection, Zend\EventManager\ListenerAggregate;

class ViewListener implements ListenerAggregate{ public function attach(EventCollection $events) { $events->attach('dispatch', array( $this, 'renderView', -100 )); }

/* … */}

21/12/2011

Page 39: Zend Framework 2

ZF2 39

Dépendance

namespace EpxBlog\Controller;

use Zend\Mvc\Controller\ActionController, PDO as DbAdapter;

class ArticleController extends ActionController{ public function setDbAdapter(DbAdapter $dbAdapter) { $this->dbAdapter = $dbAdapter; }}

21/12/2011

Page 40: Zend Framework 2

ZF2 40

Configuration via le Di

// config/autoload/database.phpreturn array( ‘di’ => array( ‘PDO’ => array( ‘parameters’ => array( ‘dsn’ => ‘mysql:dbname=XXXX;host=XXXX’, ‘username’ => ‘XXXX’, ‘password’ => ‘XXXX’, ) ) ));

21/12/2011

Page 41: Zend Framework 2

Git 41

Liens

• http://framework.zend.com/zf2• https://github.com/zendframework• http://packages.zendframework.com/• http://modules.zendframework.com/

11/04/2011

Page 42: Zend Framework 2

ZF2 42

Questions ?

21/12/2011