SlideShare a Scribd company logo
1 of 42
Future Proofing your Drupal
Skills

Piyuesh kumar
QED42
Routes {Adding new menu / Access Control / Local
Tasks / Upcasting.}
Forms {Writing new custom form / Writing system settings
form.}
Configuration System.
More Changes for developers.
Drupal 8 Demo module showing all of the above

Topics

Drupal 8 Demo module showing all of the above
Drupal 8 Demo module showing all of the above
Drupal 8 Demo module showing all of the above
Drupal 8 Demo module showing all of the above
Drupal 8 Demo module showing all of the above
Drupal 8 Demo module showing all of the above
2
Terminologies
•

Dependency Injection
Service Container / Dependency Injection
Container
Routing
Controllers
ConfigFactory

ConfigFactory
ConfigFactory
ConfigFactory
ConfigFactory

3
Dependency Injection is a
25 $ term for a 5 ¢ concept

4
Lets take a look at some Wrong code to understand this.

5
OBJECT ORIENTED WRONG CODE

6
INJECTING ITEMS REQUIRED BY THE CLASS

7
THE LESS YOUR CODE
KNOWS ABOUT THINGS
IT NEED THE MORE
REUSABLE IT IS
8
ALL OUR NOTIFIER CLASS NEEDS TO KNOW IS IT NEEDS
SOMETHING ON WHICH IT HAS TO CALL THE SEND METHOD.

9
Learn More about DI

DrupalCon Portland (Kat Bailey)
https://www.youtube.com/watch?v=kocJ6pn9kEc

10
Service Container
A Service Container (or dependency injection container) is
simply a PHP object that manages the instantiation of
services (i.e. objects)

{d8_demo.services.yml}

11
12
Things are about to get geeky!
13
Module Info file

14
Drupal 7
{d7.info}

15
Drupal 8
{d8.info.yml}

16
Routing

hook_menu replaced by
hook_default_menu_links ()
(https://drupal.org/node/20476
33 )

17
Routes
{d7.module}

18
Routes
{d8_demo.module}

{d8_demo.routing.yml}

19
Controllers
•Page

callbacks => Controllers

•namespace

Drupal/lib/<module_name/Controller/<Controller classname.php

What? Why so long?

20
Namespacing & Folder Structure

Name Spacing
• Keeps

it reusable in other project with risk factor for conflict = 0.
Drupal/<module_name>.

• Drupal/<module_name>/Controller

to keep all the Controllers related to
<module_name> grouped in the same place.

Folder Structure
• lib/Drupal/<module_name>/Controller/<classname.php
• lib

directory is used to keep all the php classes seperate from other module/yml files.

• The

Drupal/hello part of the directory path is needed to comply with PSR-0, a
standard that says that the complete class name must be represented on the file
system.

21
Drupal 8 Controller
{d8DemoController.php}

22
Route Access
•
•
•
•

Controlled via yml file iteslf.
_permission
_<access callback>
_options: _access_mode (ALL/ANY)

23
Defining _access_check_admin
•

Register a new service using d8_demo.services.yml

•

tagged with access_check so Drupal can find it when it
loads all access checks

•

Convention to create a unique service name starting with
access_check.

24
d8DemoAccessCheck
Extends
AccessInterface

25
Reusable Requirements
• Allow

everyone
_access: 'TRUE'

• Check

if user is logged in
_user_is_logged_in: 'TRUE'

• Check

if a user has a permission
_permission: 'my permission name'

• Check

if a user has a role
_role: 'role1+role2' (AND)
_role: 'role1, role2' (OR)
26
Menu Local Tasks(Drupal 7)
{d7_demo.module}

27
Menu Local tasks(Drupal 8)
{d8_demo.local_tasks.yml}

28
Upcasting
{d7_demo.module}

Drupal 8

29
Drupal 8 ParamConverter
{d8_demo.routing.yml}

{d8DemoController.php
}

30
Forms
•

Form Api stays the same in Drupal 8. However, forms are now
Classes coz of d8's Object-oriented nature.

•

Base Classes in core:
•

FormBase

•

ConfigFormBase

•

ConfirmFormBase

•

BulkFormBase

•

ViewsFormBase

•

FieldInstanceFormBase
31
FormBase/ConfigFormBase
Example

32
Forms Helper Methods

33
Configuration Management

variable_get()
variable_set()
variable_del()

34
How do i save my configurations now?
•

•

DrupalCoreConfigConfigFactory

Where does this data get saved now?

35
Plugin System
•

Info hooks => Plugins

•

hook_info => annotation based discovery

•

Why annotation based?
•
•

Memory used is released once the file is read.

•

•

Uses php's tokenizer which allows the files to be parsed as text.

Loading the file in as php would mean that allocated memory was
required until the request was finalised.

All info hooks as plugins.
36
Block as Plugins

37
Module/hook system
functions replaced with
module handler service(
https://drupal.org/node/1894
)
38
39
Changes to commonly used Drupal functions/hooks
•

hook_init removed(https://drupal.org/node/2013014)

•

drupal_goto has been
removed(https://drupal.org/node/2023537)e.g.,
drupal_goto($url)=>new RedirectResponse($url);

•

hook_boot has been removed(https://drupal.org/node/1909596)

•

$_GET[‘q'] has been removed(https://drupal.org/node/1659562)

•

drupal_*_form functions replaced with formBuilder service. e.g.,
drupal_get_from => Drupal::formBuilder()->getForm()

•

and many more...(https://drupal.org/list-changes)

40
References
Demo code is available at
https://github.com/piyuesh23/Drupal8-demo
•

https://drupal.org/list-changes

•

http://previousnext.com.au/blog/controlling-accessdrupal-8-routes-access-checks

•

https://drupal.org/node/1800686

•

DrupalCon Portland Videos
(http://www.youtube.com/playlist?
list=PLpeDXSh4nHjRlZKs7cj2L_kLI5osP5ERc)
41
THANK YOU!!

42

More Related Content

Similar to Future Proofing Your Drupal Skills

Staging Drupal 8 31 09 1 3
Staging Drupal 8 31 09 1 3Staging Drupal 8 31 09 1 3
Staging Drupal 8 31 09 1 3
Drupalcon Paris
 

Similar to Future Proofing Your Drupal Skills (20)

Intro to drupal_7_architecture
Intro to drupal_7_architectureIntro to drupal_7_architecture
Intro to drupal_7_architecture
 
A new tool for measuring performance in Drupal 8 - DrupalCamp London
A new tool for measuring performance in Drupal 8 - DrupalCamp LondonA new tool for measuring performance in Drupal 8 - DrupalCamp London
A new tool for measuring performance in Drupal 8 - DrupalCamp London
 
Taking Advantage of Microsoft PowerShell
Taking Advantage of Microsoft PowerShell Taking Advantage of Microsoft PowerShell
Taking Advantage of Microsoft PowerShell
 
Drupal 8 - Core and API Changes
Drupal 8 - Core and API ChangesDrupal 8 - Core and API Changes
Drupal 8 - Core and API Changes
 
Taking your module from Drupal 6 to Drupal 7
Taking your module from Drupal 6 to Drupal 7Taking your module from Drupal 6 to Drupal 7
Taking your module from Drupal 6 to Drupal 7
 
PowerShell for Penetration Testers
PowerShell for Penetration TestersPowerShell for Penetration Testers
PowerShell for Penetration Testers
 
Overview of RedDatabase 2.5
Overview of RedDatabase 2.5Overview of RedDatabase 2.5
Overview of RedDatabase 2.5
 
Introducing DeploYii 0.5
Introducing DeploYii 0.5Introducing DeploYii 0.5
Introducing DeploYii 0.5
 
08 Dynamic SQL and Metadata
08 Dynamic SQL and Metadata08 Dynamic SQL and Metadata
08 Dynamic SQL and Metadata
 
13th Sep, Drupal 7 advanced training by TCS
13th Sep, Drupal 7 advanced training by TCS 13th Sep, Drupal 7 advanced training by TCS
13th Sep, Drupal 7 advanced training by TCS
 
Devel for Drupal 8
Devel for Drupal 8Devel for Drupal 8
Devel for Drupal 8
 
Drupal Best Practices
Drupal Best PracticesDrupal Best Practices
Drupal Best Practices
 
Drupal online training - GoLogica
Drupal online training - GoLogicaDrupal online training - GoLogica
Drupal online training - GoLogica
 
Drupal8 for Symfony Developers (PHP Day Verona 2017)
Drupal8 for Symfony Developers (PHP Day Verona 2017)Drupal8 for Symfony Developers (PHP Day Verona 2017)
Drupal8 for Symfony Developers (PHP Day Verona 2017)
 
Staging Drupal 8 31 09 1 3
Staging Drupal 8 31 09 1 3Staging Drupal 8 31 09 1 3
Staging Drupal 8 31 09 1 3
 
Inria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMP
Inria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMPInria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMP
Inria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMP
 
From Procedural to Object-Oriented PHP in Drupal
From Procedural to Object-Oriented PHP in DrupalFrom Procedural to Object-Oriented PHP in Drupal
From Procedural to Object-Oriented PHP in Drupal
 
Drupal 8 DX Changes
Drupal 8 DX ChangesDrupal 8 DX Changes
Drupal 8 DX Changes
 
Power shell training
Power shell trainingPower shell training
Power shell training
 
Adop and maintenance task presentation 151015
Adop and maintenance task presentation 151015Adop and maintenance task presentation 151015
Adop and maintenance task presentation 151015
 

Recently uploaded

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Recently uploaded (20)

Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 

Future Proofing Your Drupal Skills

Editor's Notes

  1. Clutter-free/Reusable/Testable
  2. Necessary Clutter module_load_include Need to Bootstrap Drupal or at least the class for testing/reusing.
  3. Constructor needs to know about Mailer Class Mailer Class might need arguments in future requiring us to change the constructor of any class implementing it. Or we might not need to send an email in future at all.
  4. Constructor just knows its needs to be supplied with an instance of a Mailer class.
  5. Class can accept anything thats implementing MailerInterface. Inversion of Control. Framework supplies the code with whatever it needs. Rather than code instanting the lib classes and calling the library functions.
  6. Classes: doesn’t know anything about the container. Decoupled. Declaratively expressing their dependencies. Configuration: Contains Service Definitions(Class to intantiate+its dependencies) Injector/Container: Application: Entry point of application. Instantiate the container and ask it for what app needs.