drupal8 for symfony developers

Post on 12-Apr-2017

77 Views

Category:

Software

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Drupal8 for Symfony Developers

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

@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 • antonio@locastic.com • @antonioperic

@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

@antonioperic

Inside Locastic

@antonioperic

Almost 25% of our team are women

@antonioperic

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

@antonioperic

Drupal 101 for SF developers

@antonioperic

Before we start, small disclaimer

@antonioperic

My world is Symfony (still)

@antonioperic

@antonioperic

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

@antonioperic

Who is it for?

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

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

@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.

@antonioperic

@antonioperic

@antonioperic

@antonioperic

@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

@antonioperic

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

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

@antonioperic

• HTTP Kernel

• Request / Response

• Controllers

• Event Dispatching

• Listeners / Subscribers

Depe

nden

cy in

ject

ion

cont

aine

r

@antonioperic

Development environment

@antonioperic

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

@antonioperic

Tools

@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

@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

@antonioperic

Installation

@antonioperic

How to install Drupal8• Drush

• drush dl drupal • Composer • Download zip file

@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.

@antonioperic

Let’s use composer

@antonioperic

Let’s use composer

composer create-project drupal/drupal

@antonioperic

Let’s use composercomposer require drupal/<modulename>

for example: composer require drupal/token

@antonioperic

Run in browser

@antonioperic

Add some content

drupal create:nodes

@antonioperic

We have content but something is missing

@antonioperic

WebProfiler

@antonioperic

composer require drupal/devel

@antonioperic

Under the Hood

@antonioperic

Request -> Response

@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

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

@antonioperic

Routing

@antonioperic

Controllers

@antonioperic

Services

@antonioperic

Events / Listeners

@antonioperic

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

@antonioperic

Building Custom ModuleHelloPHPUK

@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

@antonioperic

Thank you!

antonio@locastic.com @antonioperic

www.locastic.com

top related