Joomla! Programmers Documentation

Manual Index

Extension and Dispatcher Classes for Modules

The Extension and Dispatcher classes for modules perform a similar role to those for components, but they're simpler because Joomla instantiates these classes just for the purpose of executing the module to capture the output (aka rendering the module).

The Extension class instance is accessed in a similar way

$module = $app->bootModule($moduleName, $applicationName);

where $moduleName is the name of the module (eg 'mod_example') and $applicationName is 'site' or 'administrator'.

The default module Extension class is defined in libraries/src/Extension/Module.php, and really just provides a mechanism to get to other classes:

  • the Dispatcher class (via a DispatcherFactory object), and,
  • the module's own helper class (via a HelperFactory object)

Similar to components, the module Dispatcher class contains the dispatch() function, which is used to run the module's code.

$module->getDispatcher($mod, $app)->dispatch();

Here $mod is a PHP stdClass object representing the module, including data such as the module name, module id, module title, template position, and $app is the Application instance.

The default module Dispatcher class is defined in libraries/src/Dispatcher/ModuleDispatcher.php

The Joomla code within the Dispatcher class makes available to the module copies of a number of key data items (which the module may find useful to have):

  • the module stdClass described above
  • the Application instance
  • the Input data – the query parameters associated with the URL (option, view, etc)
  • params – the module's params
  • template – the name of the template

Unlike in Joomla 3, from Joomla 4 these data items are copies, so if you change them you're not changing the original data items.

In general, you're likely to find that you can use the default module Extension and Dispatcher classes, and you can just provide (eg for mod_example)

  • the module manifest XML file – mod_example.xml
  • the module entry point file – mod_example.php, just containing PHP code rather than a class
  • a module helper file (with code to obtain the required data) – a namespaced class under src/Helper/
  • a tmpl file containing the HTML to output – under tmpl/, eg tmpl/default.php

In this Article