Drupal 9.3.0 came with a new feature called entity bundle classes. This allows more control of entity bundles within Drupal and provides a number of benefits over the previous mechanism of using hooks to control everything.
Drupal makes extensive use of entities to manage content and configuration. User details, pages of content and taxonomy terms just a few of the things that are represented in a Drupal site as content entities. Different types of similar configuration are called configuration entities, which would include things like text format settings or even date formats.
Content entities are normally fieldable, and in the case of content types and taxonomy terms Drupal allows users to generate their own variants. These different variants of content entities are called bundles.
Entities define the types of objects found in a Drupal site, bundles represent the different sub-types of these entities. For example, node is the core entity type for creating pages of content, which we sub-type into bundles to create pages, articles, events or whatever you want to represent on the site.
In this article I want to look why entity bundle classes are useful and if you should be using them in your Drupal projects.
What Problem Does This Solve?
Before looking into how to work with entity bundle classes we need to look at what problems we are trying to solve since that’s a good way of giving context to why these classes were introduced.
Take the following code, which might be found in many modules and themes in the Drupal 8/9 world.