In this hands-on course a drupal expert with 10 years of experience will give you a deep dive in the power that Drupal core has to offer.

+2400 lines of ready-to-use code snippets
Full project code included
Build a real platform, not just separate tutorials
Suitable for individual training or teams, also for experienced coders from other frameworks
Order now

This course will teach you advanced concepts of Drupal 9, Object-oriented PHP and Symfony components.

.... We start with uninstalling the node module 🙈

It struck me that there are so few good learning paths for drupal. With this course I try to fill the gap. I gave it my best and I hope you will enjoy it!

Stef Van Looveren - Senior drupal developer

Table of contents

Please read the table of contents to know what to expect.

Part 1

Drupal developer essentials

  • Composer
    • Basic composer commands
    • Comparing with drupal 7 and earlier
    • Patching with composer
  • Git best practices
  • CLI tools
  • Development & debug
    • Xdebug
    • Webprofiler
  • Configuration management
    • Basic configuration management
    • Creating custom configuration settings
    • Different configuration per environment

Part 2

Project code and set-up

  • Seed data
  • Project set-up

Not in this course

⛔ Please do not buy this course if you are looking specifically for the topics below

  • How to install drupal
  • Server set-up
  • JSON API / Webservices
  • Unit-testing
  • Drupal theming guide

Part 3

Custom entities 101, CRUD operations, workflow states and access

  • Content entities
  • Building our first content entity
  • Securing access of our entities
  • Adding the create/edit/delete forms (CRUD)
  • Views integration of our custom entity to add a listing
  • Getting up-to-speed: making the entity fieldable
    • Media field with library
    • Adding fields to the custom entity via the UI
    • Adding workflows and moderation to custom entities
  • Change entity access based on workflow states
  • Adding views plugins: custom fields and operation links
  • Adding a custom controller for direct publishing
  • Building an overview page 
  • Adding a custom views filter based on moderation state 
  • Optimize the entity teaser with custom variables for twig 
  • Adding css to views 
  • Adding a user-friendly multistep form for entity creation 
  • Add custom actions to the form 
  • Conditional fields in the Form API 
  • Updating our data seeds 

Part 4

Building the application. Storing, validating and rendering data

  • Add dynamic menu links with Menu plugins
  • Building the offer page with twig: theming a custom content entity
  • Adding a dynamic bidding form to our page with an advanced block plugin
  • Adding site-wide css and javascript
  • Adding a code-only bid entity
  • Saving the bid entities on form submission 
  • Form validation based on highest bids
  • Add dynamic variables to our entity teaser 
  • Validating the entity with constraints
  • Displaying all bids in a dynamically rendered table
  • Integrating the core revision system into the bidding process to raise a bid
  • Deleting a bid with a core dialog pop-up

Part 5

Transitions, Events, Caching and user registration

  • User notifications on transition events
  • Update entire view with custom ajax callback
  • OO in practice: deletion of bid and notification entities when an offer gets deleted
  • Caching in-depth
    • Caching of views pages 
    • Caching of custom entity pages
    • Use of cache contexts and cache tags for caching custom blocks
    • Use of cacheable dependencies in render arrays
    • Invalidate cache of another entity after saving
  • Dispatch custom Events with an EventSubscriber to redirect users 
  • Customize the user registration process with a RouteSubscriber
  • Finishing up the platform


You will be building the following software from scratch with drupal 9.
(Not much effort was put in design, because this is not a theming course!)


24/06/2020: A typo in the chapter about composer. Downgrading drupal/redirect pointed to a wrong version (8.5 instead 1.5)
29/05/2020: UserLoginSubscriber.php: I added a weight to the getSubscribedEvents() function so the redirect gets a higher priority.
29/05/2020: In the update of the Gin theme the breadcrumbs look a bit different I added some css to the container (lines 60+61)

Stay informed

Subscribe below to stay informed about this and future e-books and courses.

Order now
Buy safely on