Drupal 8

Just enough Ansible for Drupal


I had been getting by with shell scripts and SFTP to deploy Drupal sites until recently. After using Ansible for a few weeks, I realized how much I've been missing all these days. I share some of my notes on how to use Ansible to setup and deploy Drupal infrastructure in this post. Besides, this is also meant to be a full blown introduction to Ansible. A lot of tutorials don't cross the "hello world" realm and I wanted to go beyond that, hence an epic post!

There are some assumptions I'm holding about the reader and the setup, like:

User authentication in Drupal 8 - passwords

We saw how general authentication works with Drupal 8 in the previous post. We shall see how the actual authentication happens when user logs in. It all begins with a humble login route in user.services.yml of the user module.

How user authentication works in Drupal 8

Ever wondered how Drupal 8 authenticates a user? Let's do a deep dive and find out.

In this journey, we will encounter a few new concepts which I'll try and explain briefly here and in detail in separate blog posts. Many of these concepts are borrowed from Symfony and adopted in Drupal 8. The journey of a request begins in a Symfony component called HTTP kernel. The job of HTTP kernel is to handle requests and respond to them in an event driven way.

Composer autoloading and Drupal 8

Ever wondered what exists inside the vendor/ directory of your Drupal or PHP codebase? Let's dive down the rabbit hole and see.

A little bit of history

Let's digress into a little history lesson to see why things are they way they are in the PHP autoloading world.

Entity validation in Drupal 8 - part 2

In the first part, we saw how entity validation works in Drupal 8, why it is a separate component and how most parts are adopted from Symfony's entity validation framework. We will try our hands on creating our own custom validator in this post.This validator will fail to create a node if the user ID is not specified. In other words, prevent creation of anonymous nodes.

Entity validation in Drupal 8 - part 1 - how validation works

Drupal 8 has its entity validation separate and decoupled from the typical validation given by its form API. This is done for a lot of reasons. For one, entities might get added from other non UI means, like via the REST API, or programmatically, while importing data from an external source. Under these circumstances, the entity validation API comes in handy.

Using the entity API in Drupal 8

There is a lot of literature about entities and their purpose in Drupal 7 context. Most of it has been adopted in Drupal 8 as well. In this post, I'll highlight the differences between D7 and D8 entities and how to use the entity API in 8.

Entities have their own classes in 8. Also, Drupal 8 introduces the concept of config entities. These are used to store user-created configuration if its more than a piece of text, boolean or integer. They differ from the usual entities in the following ways:

Writing a custom authenticator in Drupal 8

Drupal 8 allows module developers to write their own customized authentication schemes. In this post, we shall see how we create one. Let's take a hypothetical custom authentication mechanism called the token authentication mechanism. It works like this:

The site administrator has a limited set of auto generated tokens. They issue these tokens to users who want to access the site's resources. These resources can only be accessed by giving the correct token as a part of the URL parameter, like my-page?token=ABCXYZ.

Routing and controllers in Drupal 8

The routing system of Drupal 8 is a complete rewrite of Drupal 7 and its previous versions' hook_menu. A Drupal route is a URL path with a specific return content. This return content is usually specified as a method of a controller class which returns a render array.

The routing system is powered by Symfony's HTTP Kernel component, which we will revisit later. It is not necessary to understand this in order to work with routes.

Let's dive straight away and create a new route.

Subscribe to Drupal 8