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
- FieldFormatter/
- Field/
- Plugin/
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 { ... }