Intervenant: Benoît DURAND b.durand at epixelic dot com
Zend Framework 2(beta2)
21/12/2011 Développement
Architecture
ZF2 3
L’architecture de ZF1
1. Singletons2. Registres3. Dépendances codées « en dur »
21/12/2011
ZF2 4
Un nouveau cœur pour ZF2
1. Programmation orientée aspect2. SOLID3. Exploiter pleinement le protocole HTTP
21/12/2011
Autoload
ZF2 6
Autoload
1. Suppression des appels à require_once
21/12/2011
ZF2 7
Autoload
1. Suppression des appels à require_once2. Compatible PSR-0
21/12/2011
ZF2 8
Autoload
1. Suppression des appels à require_once2. Compatible PSR-03. Chargement par namespace, et par préfix
21/12/2011
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
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
Injection de dépendances
ZF2 12
Injection de dépendances
• Découpler les dépendances entre deux composants
• Respecter la séparation des responsabilités
21/12/2011
ZF2 13
Di : exemple (1)
// Dépendance forteclass Paginator{ public function __construct() { $this->adapter = new Array(); }}
21/12/2011
ZF2 14
Di : exemple (2)
// Dépendance faibleclass Paginator{ public function __construct(Adapter $adapter) { $this->adapter = $adapter; }}
21/12/2011
ZF2 15
Di : trois types de définitions
1. Constructeur2. Setter3. Annotation
21/12/2011
ZF2 16
Di : trois stratégies
1. A l’exécution2. Par compilation3. Builder
21/12/2011
Gestion par évènements
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
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
MVC
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
ZF2 22
Gotta dispatch them all
• Applications MVC
21/12/2011
ZF2 23
Gotta dispatch them all
• Applications MVC• Classes serveur (Amf, Json, Soap, XmlRpc)
21/12/2011
ZF2 24
Gotta dispatch them all
• Applications MVC• Classes serveur (Amf, Json, Soap, XmlRpc)• Clients HTTP
21/12/2011
Modules
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
ZF2 27
Architecture
• C’est l’unité de base d’une application MVC ZF2
21/12/2011
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
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
ZF2 30
Exemple
// modules/EpxBlog/Module.phpnamespace EpxBlog;
class Module {}
21/12/2011
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
ZF2 32
Que contient un module ?
• Du code PHP (avec ou sans MVC)
21/12/2011
ZF2 33
Que contient un module ?
• Du code PHP (avec ou sans MVC)• Des fichiers statiques (styles, javascript,
images, etc)
21/12/2011
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
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
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
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
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
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
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
Git 41
Liens
• http://framework.zend.com/zf2• https://github.com/zendframework• http://packages.zendframework.com/• http://modules.zendframework.com/
11/04/2011
ZF2 42
Questions ?
21/12/2011