Drupal - How do I include a custom class file in a module?

I'd like to add that for including a custom class that doesn't fit into the D8 "plugin, controller, form, etc." defaults, you can still do so as noted PSR-4 overview here

For my use case, I dropped a "CustomClass.php" in /modules/custom/my_module/src/ At the beginning of the file I included the namespace declaration

namespace Drupal\my_module;

and in the file I wanted to use it in (in this particular case my_theme.theme) I added

use Drupal\my_module\CustomClass;

You don't use file[] = ... anymore. Instead, classes are autoloaded. For example, I have a module with the following file structure:

  • views_hybrid/
    • views_hybrid.info.yml
    • views_hybrid.module
    • src/
      • Plugin/
        • Field/
          • FieldFormatter/
            • HybridFormatter.php

HybridFormatter.php defines a class called HybridFormatter.

In my .module file, if I start typing in my IDE (NetBeans in this case) HybridFormatter it autocompletes to \Drupal\views_hybrid\Plugin\Field\FieldFormatter\HybridFormatter:: because it is autoloaded. Since I don't want that whole path littering my module, at the top I have placed the line,

use Drupal\views_hybrid\Plugin\Field\FieldFormatter\HybridFormatter;

along with use directives for other classes I am including for use with my module.

The namespace is defined in HybridFormatter.php like so:

namespace Drupal\views_hybrid\Plugin\Field\FieldFormatter;

class HybridFormatter extends FormatterBase { ... }

Tags:

8