drupal8 for symfony developers

124
Drupal8 for Symfony Developers Antonio Perić -Mažar 17.02.2017 @ #phpuk

Upload: antonio-peric-mazar

Post on 12-Apr-2017

76 views

Category:

Software


2 download

TRANSCRIPT

Page 1: Drupal8 for Symfony Developers

Drupal8 for Symfony Developers

Antonio Perić-Mažar17.02.2017 @ #phpuk

Page 2: Drupal8 for Symfony Developers

@antonioperic

About me• Antonio Perić-Mažar, mag. ing. comp. • CEO, Co-Founder @ Locastic • Co-Founder @ Shift Conference • Software developer, Symfony2 • Open Source Contributor • SFUGCRO

• www.locastic.com • [email protected] • @antonioperic

Page 3: Drupal8 for Symfony Developers

@antonioperic

Locastic• We help clients create amazing web and mobile apps (since 2011) • design and development agency

• mobile development • web development • UX/UI • Training and Consulting

• Shift Conference, Symfony Croatia

• www.locastic.com • @locastic

Page 4: Drupal8 for Symfony Developers

@antonioperic

Inside Locastic

Page 5: Drupal8 for Symfony Developers

@antonioperic

Almost 25% of our team are women

Page 6: Drupal8 for Symfony Developers

@antonioperic

Questions?• Any Drupal experts/developers here? • Symfony developers? • Symfony developers without Drupal knowledge

Page 7: Drupal8 for Symfony Developers

@antonioperic

Drupal 101 for SF developers

Page 8: Drupal8 for Symfony Developers

@antonioperic

Before we start, small disclaimer

Page 9: Drupal8 for Symfony Developers

@antonioperic

My world is Symfony (still)

Page 10: Drupal8 for Symfony Developers

@antonioperic

Page 11: Drupal8 for Symfony Developers

@antonioperic

Page 12: Drupal8 for Symfony Developers

@antonioperic

What this means• Drupal8 doesn’t use full stack Symfony, it uses components (maybe in future) • Moving Drupal to modern stack • Building powerful CMS on top of Symfony components • Connecting two big communities • More learning for Drupal developers (OOP, Symfony, new concepts)

Page 13: Drupal8 for Symfony Developers
Page 14: Drupal8 for Symfony Developers

@antonioperic

Who is it for?

• Content strategist • Site Administrators • Content editors • “Build stuff without writing code”

• Professional developers • Bespoke applications • “Make writing code easier”

Page 15: Drupal8 for Symfony Developers

@antonioperic

In Drupal 8 there's three different types of knowledge that you're going to be using in

order to work with it effectively.

Page 16: Drupal8 for Symfony Developers

@antonioperic

Page 17: Drupal8 for Symfony Developers

@antonioperic

Page 18: Drupal8 for Symfony Developers

@antonioperic

Page 19: Drupal8 for Symfony Developers

@antonioperic

Page 20: Drupal8 for Symfony Developers

@antonioperic

Symfony2 Framework Bundle

Symfony2 Bundles

Symfony2 CMF Bundles

Symfony2 Components

Partnered Libs (twig, etc.)

CMF Components

Symfony fullstack Drupal 8

Distribution

Drupal Core Modules

Drupal Contrib Modules

Drupal Core Libraries

Symfony2 Components

Partnered Libs (twig, etc.)

Drupal Components

Page 21: Drupal8 for Symfony Developers

@antonioperic

Symfony Components• ClassLoader • Console • CssSelector • DependencyInjection • EventDispatcher • HttpFoundation • HttpKernel

• Process • Routing • Serializer • Translation • Validator • Yaml

Page 22: Drupal8 for Symfony Developers

@antonioperic

• HTTP Kernel

• Request / Response

• Controllers

• Event Dispatching

• Listeners / Subscribers

Depe

nden

cy in

ject

ion

cont

aine

r

Page 23: Drupal8 for Symfony Developers

@antonioperic

Development environment

Page 24: Drupal8 for Symfony Developers
Page 25: Drupal8 for Symfony Developers
Page 26: Drupal8 for Symfony Developers

@antonioperic

Or just use your Symfony development environment• PHP built-in server • Vagrant • Docker • …

Page 27: Drupal8 for Symfony Developers

@antonioperic

Tools

Page 28: Drupal8 for Symfony Developers

@antonioperic

Drush• update core and contrib • download modules • enable modules • clear cache • update db • run cron • import config • export config

• create user • change password • one time login • backup drupal • restore drupal • compile twig templates

*Type “drush” to get full list - www.drushcommands.com

Page 29: Drupal8 for Symfony Developers
Page 30: Drupal8 for Symfony Developers
Page 31: Drupal8 for Symfony Developers
Page 32: Drupal8 for Symfony Developers
Page 33: Drupal8 for Symfony Developers
Page 34: Drupal8 for Symfony Developers

@antonioperic

Drupal Console• update core and contrib • download modules • enable modules • clear cache • update db • run cron • import config • export config

• generate console command • generate entity • generate content type • generate modules • run unit test

*Type “drupal list” to get full list - drupalconsole.com/docs

Page 35: Drupal8 for Symfony Developers
Page 36: Drupal8 for Symfony Developers
Page 37: Drupal8 for Symfony Developers
Page 38: Drupal8 for Symfony Developers
Page 39: Drupal8 for Symfony Developers
Page 40: Drupal8 for Symfony Developers

@antonioperic

Installation

Page 41: Drupal8 for Symfony Developers

@antonioperic

How to install Drupal8• Drush

• drush dl drupal • Composer • Download zip file

Page 42: Drupal8 for Symfony Developers

@antonioperic

Lets use composer• drupal/drupal.

• This uses Drupal itself as a template for the new site. It is the simplest solution but lacks additional configuration that can be helpful.

• drupal-composer/drupal-project. • This open source project acts as a kickstarter for Composer-based Drupal

sites. It provides default configuration that otherwise needs to be added manually.

Page 43: Drupal8 for Symfony Developers

@antonioperic

Let’s use composer

Page 44: Drupal8 for Symfony Developers

@antonioperic

Let’s use composer

composer create-project drupal/drupal

Page 45: Drupal8 for Symfony Developers
Page 46: Drupal8 for Symfony Developers

@antonioperic

Let’s use composercomposer require drupal/<modulename>

for example: composer require drupal/token

Page 47: Drupal8 for Symfony Developers

@antonioperic

Run in browser

Page 48: Drupal8 for Symfony Developers
Page 49: Drupal8 for Symfony Developers
Page 50: Drupal8 for Symfony Developers
Page 51: Drupal8 for Symfony Developers
Page 52: Drupal8 for Symfony Developers
Page 53: Drupal8 for Symfony Developers
Page 54: Drupal8 for Symfony Developers

@antonioperic

Add some content

Page 55: Drupal8 for Symfony Developers
Page 56: Drupal8 for Symfony Developers

drupal create:nodes

Page 57: Drupal8 for Symfony Developers
Page 58: Drupal8 for Symfony Developers

@antonioperic

We have content but something is missing

Page 59: Drupal8 for Symfony Developers
Page 60: Drupal8 for Symfony Developers

@antonioperic

WebProfiler

Page 61: Drupal8 for Symfony Developers

@antonioperic

composer require drupal/devel

Page 62: Drupal8 for Symfony Developers
Page 63: Drupal8 for Symfony Developers
Page 64: Drupal8 for Symfony Developers
Page 65: Drupal8 for Symfony Developers
Page 66: Drupal8 for Symfony Developers
Page 67: Drupal8 for Symfony Developers
Page 68: Drupal8 for Symfony Developers
Page 69: Drupal8 for Symfony Developers
Page 70: Drupal8 for Symfony Developers
Page 71: Drupal8 for Symfony Developers

@antonioperic

Under the Hood

Page 72: Drupal8 for Symfony Developers
Page 73: Drupal8 for Symfony Developers
Page 74: Drupal8 for Symfony Developers
Page 75: Drupal8 for Symfony Developers
Page 76: Drupal8 for Symfony Developers
Page 77: Drupal8 for Symfony Developers
Page 78: Drupal8 for Symfony Developers
Page 79: Drupal8 for Symfony Developers

@antonioperic

Request -> Response

Page 80: Drupal8 for Symfony Developers
Page 81: Drupal8 for Symfony Developers
Page 82: Drupal8 for Symfony Developers

@antonioperic

Pipeline1. After the controller returned a render array, the VIEW will be triggered by the HttpKernel, because

the controller result is not a Response, but a render array. 2. MainContentViewSubscriber is subscribed to the VIEW event. It checks whether the controller

result is an array, and if so, it guarantees to generate a Response. 3. Next, MainContentViewSubscriber checks whether the negotiated request format is supported:

1. Any format for which a main content renderer service exists (an implementation of MainContentRendererInterface is supported.

2. If the negotiated request format is not supported, a 406 JSON response is generated, which lists the supported formats in a machine-readable way (as per RFC 2616, section 10.4.7).

4. Otherwise, when the negotiated request format is supported, the corresponding main content renderer service is initialized. A response is generated by calling MainContentRendererInterface::renderResponse() on the service. That's it

Page 83: Drupal8 for Symfony Developers

@antonioperic

Main Content Renderes HTML: HtmlRenderer (text/html) AJAX: AjaxRenderer (application/vnd.drupal-ajax) Dialog: DialogRenderer (application/vnd.drupal-dialog) Modal: ModalRenderer (application/vnd.drupal-modal)

Page 84: Drupal8 for Symfony Developers
Page 85: Drupal8 for Symfony Developers
Page 86: Drupal8 for Symfony Developers

@antonioperic

Routing

Page 87: Drupal8 for Symfony Developers
Page 88: Drupal8 for Symfony Developers

@antonioperic

Controllers

Page 89: Drupal8 for Symfony Developers
Page 90: Drupal8 for Symfony Developers
Page 91: Drupal8 for Symfony Developers
Page 92: Drupal8 for Symfony Developers
Page 93: Drupal8 for Symfony Developers
Page 94: Drupal8 for Symfony Developers

@antonioperic

Services

Page 95: Drupal8 for Symfony Developers
Page 96: Drupal8 for Symfony Developers
Page 97: Drupal8 for Symfony Developers

@antonioperic

Events / Listeners

Page 98: Drupal8 for Symfony Developers

@antonioperic

Page 99: Drupal8 for Symfony Developers

@antonioperic

Registering event subscribersHere are the steps to register an event subscriber:

Define a service in your module, tagged with 'event_subscriber' (see the Services topic for instructions). Define a class for your subscriber service that implements \Symfony\Component\EventDispatcher\EventSubscriberInterface In your class, the getSubscribedEvents method returns a list of the events this class is subscribed to, and which methods on the class

should be called for each one. Example:

public static function getSubscribedEvents() { // Subscribe to kernel terminate with priority 100. $events[KernelEvents::TERMINATE][] = array('onTerminate', 100); // Subscribe to kernel request with default priority of 0. $events[KernelEvents::REQUEST][] = array('onRequest'); return $events; }

Page 100: Drupal8 for Symfony Developers

@antonioperic

Building Custom ModuleHelloPHPUK

Page 101: Drupal8 for Symfony Developers
Page 102: Drupal8 for Symfony Developers
Page 103: Drupal8 for Symfony Developers
Page 104: Drupal8 for Symfony Developers
Page 105: Drupal8 for Symfony Developers
Page 106: Drupal8 for Symfony Developers
Page 107: Drupal8 for Symfony Developers
Page 108: Drupal8 for Symfony Developers
Page 109: Drupal8 for Symfony Developers
Page 110: Drupal8 for Symfony Developers
Page 111: Drupal8 for Symfony Developers
Page 112: Drupal8 for Symfony Developers
Page 113: Drupal8 for Symfony Developers
Page 114: Drupal8 for Symfony Developers
Page 115: Drupal8 for Symfony Developers
Page 116: Drupal8 for Symfony Developers
Page 117: Drupal8 for Symfony Developers
Page 118: Drupal8 for Symfony Developers
Page 119: Drupal8 for Symfony Developers
Page 120: Drupal8 for Symfony Developers
Page 121: Drupal8 for Symfony Developers
Page 122: Drupal8 for Symfony Developers
Page 123: Drupal8 for Symfony Developers

@antonioperic

Recap• Symfony components are main building tool for D8 • DIC is backbone of Drupal • DI for controllers is very easy • Events are replacing hooks • Building custom module is easy • Hardest thing is to start • This is just beginning there is a lot to learn about and from D8

Page 124: Drupal8 for Symfony Developers

@antonioperic

Thank you!

[email protected] @antonioperic

www.locastic.com