8. Autoload
1. Suppression des appels à require_once
2. Compatible PSR-0
3. Chargement par namespace, et par préfix
21/12/2011 ZF2 8
9. Autoload
1. Suppression des appels à require_once
2. Compatible PSR-0
3. Chargement par namespace, et par préfix
4. Chargement avec une classmap
21/12/2011 ZF2 9
10. Autoload
1. Suppression des appels à require_once
2. Compatible PSR-0
3. Chargement par namespace, et par préfix
4. Chargement avec une classmap
21/12/2011 ZF2 10
12. Injection de dépendances
• Découpler les dépendances entre deux
composants
• Respecter la séparation des responsabilités
21/12/2011 ZF2 12
13. Di : exemple (1)
// Dépendance forte
class Paginator
{
public function __construct() {
$this->adapter = new Array();
}
}
21/12/2011 ZF2 13
14. Di : exemple (2)
// Dépendance faible
class Paginator
{
public function __construct(Adapter $adapter) {
$this->adapter = $adapter;
}
}
21/12/2011 ZF2 14
15. Di : trois types de définitions
1. Constructeur
2. Setter
3. Annotation
21/12/2011 ZF2 15
16. Di : trois stratégies
1. A l’exécution
2. Par compilation
3. Builder
21/12/2011 ZF2 16
18. Vocabulaire
1. Un event est une action
2. Un listener est une fonction qui peut réagir à
un event
3. 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 18
19. EventManager : exemple
use ZendEventManagerEventManager;
$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 ZF2 19
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 21
26. Définition
« Un module est un ensemble de classes
et d’autres fichiers qui résout
un problème spécifique
au sein d’une application métier. »
ZF2 RFC
21/12/2011 ZF2 26
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 28
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 29
31. Module.php : cas d’utilisation
// modules/EpxBlog/Module.php
namespace EpxBlog;
class Module
{
// Chargement automatique des ressources
public function getAutoloaderConfig() {}
// Configuration de base du module
public function getConfig() {}
}
21/12/2011 ZF2 31
32. Que contient un module ?
• Du code PHP (avec ou sans MVC)
21/12/2011 ZF2 32
33. Que contient un module ?
• Du code PHP (avec ou sans MVC)
• Des fichiers statiques (styles, javascript,
images, etc)
21/12/2011 ZF2 33
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 34
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 35
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 36
37. Contrôleur
namespace EpxBlogController;
use ZendMvcControllerActionController;
class ArticleController extends ActionController
{
public function viewAction()
{
$query = $this->getRequest()->query();
return array('titre' => $query->get('slug'));
}
}
21/12/2011 ZF2 37
38. Vue
use ZendEventManagerEventCollection,
ZendEventManagerListenerAggregate;
class ViewListener implements ListenerAggregate
{
public function attach(EventCollection $events)
{
$events->attach('dispatch', array(
$this, 'renderView', -100
));
}
/* … */
}
21/12/2011 ZF2 38
39. Dépendance
namespace EpxBlogController;
use ZendMvcControllerActionController,
PDO as DbAdapter;
class ArticleController extends ActionController
{
public function setDbAdapter(DbAdapter $dbAdapter)
{
$this->dbAdapter = $dbAdapter;
}
}
21/12/2011 ZF2 39