22
DRUPAL 8, SYMFONY JEU XDIC ODE, 5 D ÉCEM B RE 20 13

Drupal 8, symfony

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Drupal 8, symfony

DRUPAL 8

, SYM

FONY

J EU

XD

I CO

DE

, 5

CE

MB

RE

20

13

Page 2: Drupal 8, symfony

Introduction

• Dépôt GitHub– http://github.com/JeUXdiCode

• Présentation1. Qu’est ce que Drupal ?2. Pourquoi Symfony ?3. Les composants Symfony utilisés dans Drupal 84. Ce qui change pour les développeurs5. Module DarkJador (Hello World)

Page 3: Drupal 8, symfony

1. Qu’est ce que Drupal ?

• Un CMS• Version 8• Environnement technique• Communauté• Modules• Références• Utilisations

Page 4: Drupal 8, symfony

2. Pourquoi Symfony

• Pourquoi un framework– Plus grande communauté– Meilleure prise en main par les devs– Facilité de maintenance– Bonne pratique

• Pourquoi Symfony– Composantes modulaires– Communauté ouverte– Injection de dépendance– Cache HTTP et ESI– Gestion des webservices REST

Page 5: Drupal 8, symfony

3. Les composants Symfony utilisés dans Drupal 8

• HttpKernel• Autoloader• DependencyInjection• Routing• EventDispatcher• Twig• HttpCache

Page 6: Drupal 8, symfony

3. 1. HTTP Kernel

• Request / Response paradigme• Event Driven• MVC

Page 7: Drupal 8, symfony

3. 1. HTTP Kernel

Page 8: Drupal 8, symfony

3. 2. Autoloader

• Norme PSR-0– Namespace– Nommage de classe– Arborescence

• Composer

Page 9: Drupal 8, symfony

3. 3. Dependency Injection• class Mailer

{ private $transport;

public function __construct() { $this->transport = 'sendmail'; }}

•class Mailer{ private $transport;

public function __construct($transport) { $this->transport = $transport; }

• }

Page 10: Drupal 8, symfony

3. 3. Dependency Injection

• parameters: # ... mailer.transport: sendmail

services: mailer: class: Mailer arguments: ["%mailer.transport%"] newsletter_manager: class: NewsletterManager calls: - [setMailer, ["@mailer"]]

Page 11: Drupal 8, symfony

3. 3. Routing

• Déclarer des routes• Types de Endpoint• Injection de dépendances• Contrôle d’accès

Page 12: Drupal 8, symfony

3. 4. EventDispatcher

• Implémentation du pattern Mediator

Page 13: Drupal 8, symfony

3. 4. EventDispatcherCatch Event$dispatcher = new EventDispatcher();$listener = new AcmeListener();$dispatcher->addListener('foo.action', array($listener, 'onFooAction'));

Create Eventclass FilterOrderEvent extends Event{ protected $order; public function __construct(Order $order) { $this->order = $order; }

public function getOrder() { return $this->order; }}

$dispatcher = new EventDispatcher();$event = new FilterOrderEvent($order);$dispatcher->dispatch(StoreEvents::STORE_ORDER, $event);

Page 14: Drupal 8, symfony

3. 5. Twig

• Différent de PHPTemplate• Filtres Custom• Exemple– <span>{{ message | upper }}</span>

Page 15: Drupal 8, symfony

3. 4. HttpCache

• La norme HTTP 1.1 – RFC 2616• Les headers HTTP• Reverse Proxy Cache• Et les sessions ?

Page 16: Drupal 8, symfony

3. 4. HttpCache

Header renvoyé par varnishHTTP/1.1 200 OKServer: varnishContent-Type: text/html; charset=utf-8Content-Length: 15619Cache-Control: public, max-age=86400Last-Modified: Wed, 04 Dec 2013 19:13:45 +0000Expires: Sun, 11 Mar 2014 12:00:00 GMTVary: Cookie,Accept-EncodingX-Varnish-Cache: HIT

Page 17: Drupal 8, symfony

3. 4. HttpCache

Header renvoyé par apacheHTTP/1.1 200 OKServer: apacheContent-Type: text/html; charset=utf-8Content-Length: 15619Cache-Control: public, max-age=86400Last-Modified: Wed, 04 Dec 2013 19:13:45 +0000Expires: Sun, 11 Mar 2014 12:00:00 GMTVary: Cookie,Accept-Encoding

Page 18: Drupal 8, symfony

3. 4. HttpCache

• Varnish– La mise en cache– Gestion des sessions– ESI

Page 19: Drupal 8, symfony

4. Ce qui change pour les développeurs

• Arborescence du CMS• Répertoires des modules autoloadés• Routing• Hooks• Composer

Page 20: Drupal 8, symfony

4. Ce qui change pour les développeurs

• Nouvelles solutions frontend– Backbone– Underscorejs– Modernizr– Préprocesseur CSS ( LESS / SASS )

Page 21: Drupal 8, symfony

5. Module DarkJador (HelloWorld)

• Utilise les composants présentés

Page 22: Drupal 8, symfony

Conclusion