Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

Extension points: handlers, INI registration and overrides

Where framework developers register services, tags, listeners and plugins, Exponential registers extension points in INI settings, directories and designs - the nine registration mechanisms, a map of the most used…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/web-framework-developers/extension-points-and-handlers.md

On this page

Extension points: handlers, INI registration and overrides

This page is for developers who extend a framework by registering services, tagging them, subscribing listeners or writing plugins. Exponential is extended in a handful of repeating ways, all listed in one catalog: expRADCatalogue::points() (kernel/setup/expradcatalog.php), shown at Setup > RAD (/setup/rad) with 70 extension points, most of them with a wizard that writes the boilerplate (Extension points, RAD tools).

Contents

  1. The registration mechanisms
  2. The extension points you will use first
  3. Framework counterparts
  4. Order of preference

The registration mechanisms

From How things are registered:

MechanismHow it worksNearest framework idea
directorya class in a directory the kernel scans, named by a RepositoryDirectories or ExtensionDirectories settingauto-discovery by convention
handlera class named by an INI setting, created through eZExtension::getHandlerClass()a configured service implementation
autoloada class reached through the extension autoload mapautowired classes
filea file in a place the kernel looks by nameconvention over configuration
designa template in a design, found through the design chaintemplate path override
inisettings onlyconfiguration
registryentries of a registry that rad.ini declarestagged services
filtera listener of a filter event in site.ini [Event] Listeners[]event subscriber that returns a value
overridea kernel class replaced through the override autoloadclass replacement, monkey patching

The extension points you will use first

You wantExtension pointRegistered by
New addresses and screensmodule and viewsmodule.ini [ModuleSettings] ExtensionRepositories[]
A permission for thempolicy function and limitation$FunctionList in module.php
Template helperstemplate operatorsite.ini [TemplateSettings] ExtensionAutoloadPath[]
Data for templatesfetch functionfunction_definition.php next to module.php
A new field typedatatypecontent.ini [DataTypeSettings] ExtensionDirectories[], AvailableDataTypes[]
A step in a business processworkflow event typeworkflow.ini [EventSettings]
Code at a kernel eventkernel event listenersite.ini [Event] Listeners[]
Scheduled workcronjob partcronjob.ini
A JSON endpoint for your pagesezjscore server functionezjscore.ini [ezjscServer_<name>]
REST routesREST providerrest.ini
Another way to sign inuser login handlersite.ini [UserSettings] LoginHandler[]
Your templates and stylesheetsdesign extensiondesign.ini [ExtensionSettings] DesignExtensions[]

Each row is documented with its contract and kernel file in the catalog, and most have a page among the application creator guides.

Framework counterparts

FrameworkYou wouldIn Exponential
Symfonywrite a bundle with services.yaml, tags and compiler passeswrite an extension with settings/*.ini.append.php entries
Laravelwrite a package with a service providerthe same: the extension's settings are its "provider"
Djangoadd an app to INSTALLED_APPSadd the extension to ActiveExtensions[]
Railswrite an engine or a Railtiean extension
Springadd a starter with auto-configurationan extension; INI settings take the place of auto-configuration

Order of preference

  1. Settings only where a setting exists.
  2. A registered extension point: a module, an operator, a handler, a listener.
  3. Re-implementation of a runnable ([RunnableSettings] Implementation[]) for one kernel command, cronjob part or view.
  4. A kernel class override, the last resort: nothing registers it by name, and two extensions replacing the same class do not know of each other.

Never edit files of the kernel or of another extension in place.

Become an Exponential Partner

Partners share their information, provide funding, contribute back and develop the products with us, and that is how Exponential grows. A partner website and dashboard are planned for mid-2027: please become a partner today to speed up our growth rate and land new features faster.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x