Drupal8 modernization (new object-oriented base) and adoption of many Symfony components is a huge step in connecting these two amazing communities and amazing projects. Drupal8 is not powered by full-stack Symfony and there is still many differences between these two relatives, but still, Symfony developers should master it easily. This talk is for Symfony developers who don't have experience with Drupal8. It will guide you through routing, controllers, hooks, events, Drupal Console, DI and many other interesting elements that power Drupal8 under the hood. It will also show how to build custom modules Symfony way.
2. @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
3. @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
12. @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)
13.
14. @antonioperic
Who is it for?
• Content strategist
• Site Administrators
• Content editors
• “Build stuff without writing code”
• Professional developers
• Bespoke applications
• “Make writing code easier”
15. @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.
42. @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.
82. @antonioperic
Pipeline
1. 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
99. @antonioperic
Registering event subscribers
Here 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 SymfonyComponentEventDispatcherEventSubscriberInterface
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;
}
123. @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