Inzicht in Drupal 8 - Deel 1: de structuur van Drupal 8

Deel 1: de structuur van Drupal

Drupal 8 is een revolutie! Niet een evolutie zoals Drupal 7 in vergelijking met Drupal 6, maar een compleet andere architectuur- en coderingsmethodiek! Ik ben ervan overtuigd dat deze grote veranderingen nodig waren om het CMS te professionaliseren en moderniseren. Ik geloof dat de verschuiving naar objectoriëntatie een beroep zal doen op ontwikkelaars en de algemene software kwaliteit zal verbeteren. Ik dank de Drupal core ontwikkelaars voor hun lef en inzet!

Het onder de knie krijgen is echter een grote uitdaging voor bestaande (en nieuwe) web ontwikkelaars. Geef jezelf een voorsprong door dit artikel te lezen! Dit artikel biedt je een startpunt voordat je in Drupal 8 module ontwikkeling duikt. Ik heb het geschreven nadat ik zowel Symfony2 als Drupal 8 al dagen lang bestudeerde, met behulp van stapsgewijs debugging, code lezen en online artikelen. Ik ben een ervaren Drupal 7 ontwikkelaar, maar wist niets van Symfony en had (nog) niet bijgedragen aan de Drupal 8 core. Door het delen van wat ik geleerd heb denk ik ook jouw begrip van het onderwerp kunnen verbeteren.

Dit artikel wordt in de komende vier weken in vier delen gepubliceerd. In dit eerste deel kijken we naar de algemene structuur van het Drupal 8- framework, met name in relatie tot de Symfony2-componenten. We zien welke Symfony2 componenten in Drupal worden gebruikt en hoe. In het volgende deel kijken we gedetailleerd naar de zeer belangrijke service container. In het derde deel gaan we in op bootstrappen en routing in Drupal 8. Je zal leren hoe verzoeken worden behandeld. In het 4e en laatste deel worden enkele andere spannende en nieuwe , ‘need to know’ Drupal 8 functies beschreven.

Symfony2

Het Symfony2 framework is ontworpen om een ontwikkelaar in staat te stellen een maatwerk webbased applicaties op te bouwen. Symfony is geen CMS omdat het niet kan worden gebruikt om een site te beheren. Er moet code worden geschreven om een applicatie te maken. Symfony biedt een manier om dat efficiënt te doen. In theorie kan een CMS worden geschreven bovenop Symfony. Maar in de praktijk werd de standaard benadering van Symfony niet flexibel genoeg gevonden voor Drupal.

In plaats daarvan werd in Drupal 8 gekozen om alleen de (uitstekende) kernlagen van Symfony te gebruiken en uit te breiden om ondersteuning te bieden voor Drupal-modules. Dit heeft geleid tot een uitgebalanceerd systeem dat een goed (en ongewijzigd) onderdeel van de Symfony-core gebruikt en dat uitbreidt met een zeer flexibele CMS-laag. Het beste van beide werelden!

Components

De Symfony-core bestaat uit verschillende componenten. Sommige zijn van vitaal belang voor het systeem, zoals het Http Foundation component dat HTTP begrijpt en een mooie request en respons  object biedt dat door de andere componenten wordt gebruikt. Anderen zijn slechts hulpcomponenten, zoals de Validator, die gegevens helpen valideren (is het een geldig e-mailadres / url / nummer / enz.). In het hart van het systeem is de Kernel component. Deze Kernel is hoofdzakelijk de 'main class' die de omgeving (services en bundles) beheert en de verantwoordelijkheid heeft om een http request te verwerken. Een ontwikkelaar kan een systeem uitbreiden door de Kernel uit te breiden, zoals AppKernel ook Kernel uitbreidt, en daar zijn eigen bundles aan toe te voegen. Deze bundles kunnen worden gebruikt om 'coherente' functionaliteiten te maken, te vergelijken met modules in Drupal.

Drupal gebruikt alleen een aantal Symfony componenten, die in onderstaande afbeelding te zien zijn.

Hoe Drupal 8 Symfony2 uitbreidt

Drupal breidt Kernel niet uit zoals een Symfony2 web app doet. Door de Kernel interface te implementeren biedt het echter een vergelijkbare functionaliteit. Dit komt doordat Drupal de 'bundle'-benadering van Symfony niet deelt. Bundles bieden een goede manier om aangepaste webapplicaties op te bouwen, maar zijn minder geschikt voor het bouwen van een CMS dat zeer flexibel en uitbreidbaar moet zijn. De DrupalKernel laadt de omgeving (beschikbare services en modules) op een enigszins andere (maar vergelijkbare) manier dan Kernel, maar delegeert de request handling naar de HttpKernel, net zoals Symfony's Kernel doet.

Bovendien brengt Drupal 8 zijn eigen componenten en kerncode in. Een schematisch overzicht wordt getoond in de volgende afbeelding.

Conclusie

Hiermee eindigt het eerste deel van het 'Start met leren Drupal 8' artikel. Volgende week gaan we in op de Service Container, die kan worden beschouwd als de ‘backbone’ van het Drupal systeem. Dat moet je begrijpen voor dat je aan de andere componenten begint.

Interesse? 

Delen