Drupal 8, symfony

Post on 30-Nov-2014

296 views 3 download

description

 

Transcript of Drupal 8, symfony

DRUPAL 8

, SYM

FONY

J EU

XD

I CO

DE

, 5

CE

MB

RE

20

13

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)

1. Qu’est ce que Drupal ?

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

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

3. Les composants Symfony utilisés dans Drupal 8

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

3. 1. HTTP Kernel

• Request / Response paradigme• Event Driven• MVC

3. 1. HTTP Kernel

3. 2. Autoloader

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

• Composer

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

• }

3. 3. Dependency Injection

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

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

3. 3. Routing

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

3. 4. EventDispatcher

• Implémentation du pattern Mediator

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

3. 5. Twig

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

3. 4. HttpCache

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

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

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

3. 4. HttpCache

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

4. Ce qui change pour les développeurs

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

4. Ce qui change pour les développeurs

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

5. Module DarkJador (HelloWorld)

• Utilise les composants présentés

Conclusion