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

Design pattern catalogue

Every abstraction and design pattern of the Exponential 6 stack, found in the source code: 6206 instances in 29 categories across kernel, lib and extensions, with file, class, description and extension point.

Download as PDF

Address: https://doc.exponential.earth/learninminutes/exphelp/viewer/standards/patterns/README.md

On this page

Design pattern catalogue

This catalogue is for developers who extend Exponential or change its kernel. It lists every abstraction the code uses, where it is, and how a new implementation is plugged in, so that new code follows the patterns that are already there instead of inventing new ones. It is generated from the source code, so it is complete and current for the code it was built from; the rules that recognize each pattern are heuristic and are explained below.

Runnable examples of most of these extension points: Examples and the cookbook.

The rules the code follows: Standards and Kernel architecture.

In numbers

Instances (all categories)6206
Classes, interfaces, traits and enums3516 (3419 classes, 96 interfaces, 1 trait)
... with at least one pattern2871
Module views532
Policy functions260
Fetch functions316
Template operators255
Cronjob parts49
Event hooks99
INI plugin points842
Source files read4512 PHP, 577 INI
Areas155

The patterns

PatternGroupInstancesRecognized by
Active Record (eZPersistentObject)Data access234Extends eZPersistentObject, directly or through a parent class.
Datatype (Strategy for content fields)Plugins54Extends eZDataType, directly or through a parent class.
Workflow event type (Command, plugin)Plugins15Extends eZWorkflowEventType.
Template operator (Interpreter plugin)Plugins338Registered in an eztemplateautoload.php ($eZTemplateOperatorArray[]), or has operatorList() and modify().
Template function (Interpreter plugin)Plugins45Registered in an eztemplateautoload.php ($eZTemplateFunctionArray[]), or has functionList() and process().
Fetch function (Query Object, Facade)Plugins354An entry of a module's function_definition.php, or a class named *FunctionCollection.
Module view (Page Controller)Request handling993An entry of $ViewList in a module.php, or a class that extends ModuleView or Page (the runnable form of a view).
Policy function (access control)Request handling260An entry of $FunctionList in a module.php.
Front ControllerRequest handling10The kernel classes ezpKernel, ezpKernelWeb, ezpKernelTreeMenu, ezpKernelRest, eZModule and their kind.
Command (console, scripts, cronjobs)Request handling247Extends Command, CronjobPart or Runnable (the runnable console commands and cronjob parts), or a cronjobs/*.php file.
Singleton / instance()Creation77Has a static instance() or getInstance() method.
Factory and static factory methodsCreation443Class name ends in Factory, or has static create(), from(), factory(), make*() methods, or creates new self/new static in a static method.
BuilderCreation10Class name contains Builder or Generator.
RegistryStructure39Class name contains Registry, or has static register*() methods.
Strategy / handlerBehavior382Class name ends in Handler, Backend, Driver, Transport, Engine or Strategy, or implements an interface whose name does.
Template Method / abstract base classBehavior69An abstract class with both abstract and concrete methods.
Interface (contract)Structure96Every interface.
Observer / listener / eventBehavior10Class name contains Listener, Observer or Subscriber, or has attach()/notify()/addListener() methods; every ezpEvent notify()/filter() call (see the hooks page).
Event hook (ezpEvent)Behavior99A call of ezpEvent::getInstance()-›notify( 'EVENT' ) or -›filter( 'EVENT' ).
Adapter / bridge / wrapperStructure6Class name contains Adapter, Bridge, Wrapper or Proxy.
Facade / serviceStructure40Class name ends in Facade, Service, Manager, API or Api.
Decorator / filterStructure64Class name contains Decorator or Filter.
Chain of ResponsibilityBehavior19Class name contains LoginHandler, Chain, Pipeline, Middleware, Router or Matcher.
IteratorBehavior16Implements Iterator, IteratorAggregate or ArrayAccess.
Value object / structStructure106Class name ends in Struct, Value, Result, Item, Info or Definition and the class has few methods, or extends ezcBaseStruct.
Exception hierarchyStructure73Extends Exception, an *Exception class or Error.
Trait (mixin)Structure1Every trait.
Utility (static helper)Structure730A concrete class whose methods are all static (at least two).
INI plugin point (extension point)Plugins1376A setting of a settings/*.ini file (or an extension's) whose value is the name of a class of the catalogue.

The areas

One page per part of the code base: every class with its patterns, and the views, functions, operators and plugin points defined there.

AreaClassesViewsFetch functionsOperatorsPlugin points
extension/AdminAid160018
extension/autorss20000
extension/bccie4850044
extension/bcgooglesitemaps41000
extension/bcwebsitestatistics40060
extension/birthday40001
extension/cjw_newsletter19757161321
extension/cjw_themes_jumper62002
extension/cjw_tmv70401
extension/enhancedezbinaryfile30010
extension/enhancedselection260001
extension/expai186912669
extension/expchangeclass73103
extension/exphelpsite10000
extension/expimageeditor51100
extension/explayouts15099085
extension/explayouts_api100000
extension/explayouts_content_browser40000
extension/explayouts_content_browser_core30001
extension/explayouts_content_browser_ui21000
extension/explayouts_core130001
extension/explayouts_relation_list_query40000
extension/explayouts_site_api60000
extension/explayouts_standard230000
extension/explayouts_tags_query20000
extension/explayouts_ui2014010
extension/explayouts_ui_api64000
extension/expquery_translator530000
extension/expqueue275005
extension/expservices7800069
extension/expsite_api70000
extension/expsite_app20000
extension/expsite_core40000
extension/expsite_data_media20000
extension/expsite_installer20000
extension/expui40011
extension/exp_adminui10000
extension/exp_enhanced_link30000
extension/exp_oe_tiptap141003
extension/ezauthorize52000
extension/ezautosave20001
extension/ezdemo50060
extension/ezfind513728
extension/ezflow288656
extension/ezformtoken10000
extension/ezgmaplocation40001
extension/ezie3213000
extension/ezjscore21301211
extension/ezmbpaex42000
extension/ezmultiupload82300
extension/ezodf39110014
extension/ezoe268017
extension/ezoracle80003
extension/ezownerchange51001
extension/ezpaypal41000
extension/ezpm512400
extension/ezpostgresqlcluster20000
extension/ezprestapi90002
extension/ezprestapiprovider20002
extension/ezssp20000
extension/ezstarrating80032
extension/eztags3217957
extension/ezupdate170000
extension/ezurlmultisite800134
extension/ezwebin10060
extension/ezwt51011
extension/git_manager230001
extension/hcaptcha50000
extension/ngclasslist20000
extension/nxc_powercontent6405600
extension/owsimpleoperator50000
extension/powercontent31000
extension/recaptcha40000
extension/sevenx_authentication_2fa214001
extension/sevenx_dse530000
extension/sevenx_themes_media72003
extension/sevenx_themes_simple100016
extension/sevenx_themes_super10000
extension/sqliimport2032030135
extension/str_replace20010
extension/swark430000
extension/syndication3413001
extension/xrowextract9492035
extension/xrowmetadata382071
kernel/classes2170000
kernel/classes/apikey30000
kernel/classes/audit540000
kernel/classes/basketinfohandlers10000
kernel/classes/binaryhandlers10000
kernel/classes/classicmenu20000
kernel/classes/clusterfilehandlers20000
kernel/classes/collaborationhandlers10000
kernel/classes/confirmorderhandlers10000
kernel/classes/contentcheck130000
kernel/classes/contentfinder30000
kernel/classes/contentjob200000
kernel/classes/datatable190000
kernel/classes/datatypes810000
kernel/classes/debugbar80000
kernel/classes/help570000
kernel/classes/i18n10000
kernel/classes/ini320000
kernel/classes/logviewer190000
kernel/classes/mail10000
kernel/classes/mailpreferences180000
kernel/classes/notification190000
kernel/classes/packagecreators40000
kernel/classes/packagehandlers70000
kernel/classes/packageinstallers20000
kernel/classes/passkey50000
kernel/classes/pdfexport40000
kernel/classes/reauth50000
kernel/classes/requestclassifier120000
kernel/classes/requestlog10000
kernel/classes/role30000
kernel/classes/secrets30000
kernel/classes/shopaccounthandlers40000
kernel/classes/subitems240000
kernel/classes/syscard250000
kernel/classes/transfer100000
kernel/classes/uiswitch60000
kernel/classes/user140000
kernel/classes/vathandlers10000
kernel/classes/webauthn40000
kernel/classes/workflowtypes110000
kernel/common2600480
kernel/modules7823118200
kernel/private1818110
kernel/private/classes/asynchronouspublisheroutput20000
kernel/private/classes/clusterfilehandlers140000
kernel/private/classes/commands1050000
kernel/private/classes/cronjobs300000
kernel/private/classes/exceptions140000
kernel/private/classes/httpcache20000
kernel/private/classes/requestrules440000
kernel/private/classes/runnable40000
kernel/private/classes/services80000
kernel/private/classes/urlaliasfilters10000
kernel/private/classes/views2720000
kernel/private/classes/webdav30000
lib20000
lib/ezdb110000
lib/ezdbschema80000
lib/ezdiff100000
lib/ezfile130000
lib/ezi18n220000
lib/ezimage160000
lib/ezlocale60000
lib/ezmath20000
lib/ezpdf50010
lib/ezsession60000
lib/ezsoap100000
lib/eztemplate56001150
lib/ezutils470000
settings0000254

What was read

The git-tracked PHP and INI files below kernel/, lib/ and extension/ of the Exponential repository (tests and vendor/ directories left out), and these extensions:

ExtensionSource
AdminAidits own repository
autorssComposer package
bccieComposer package
bcgooglesitemapsComposer package
bcwebsitestatisticsComposer package
birthdayComposer package
cjw_newsletterComposer package
cjw_themes_jumperits own repository
cjw_tmvits own repository
enhancedezbinaryfileComposer package
enhancedselection2Composer package
exp_adminuiits own repository
exp_enhanced_linkComposer package
exp_oe_tiptapits own repository
expaiits own repository
expchangeclassits own repository
exphelpsiteshipped with the kernel
expimageeditorshipped with the kernel
explayoutsits own repository
explayouts_apiits own repository
explayouts_content_browserits own repository
explayouts_content_browser_coreits own repository
explayouts_content_browser_uiits own repository
explayouts_coreits own repository
explayouts_relation_list_queryits own repository
explayouts_site_apiits own repository
explayouts_standardits own repository
explayouts_tags_queryits own repository
explayouts_uiits own repository
explayouts_ui_apiits own repository
expquery_translatorits own repository
expqueueits own repository
expservicesshipped with the kernel
expsite_apiits own repository
expsite_appits own repository
expsite_coreits own repository
expsite_data_mediaits own repository
expsite_installerits own repository
expuiits own repository
ezauthorizeComposer package
ezautosaveComposer package
ezdemoComposer package
ezfindits own repository
ezflowComposer package
ezformtokenshipped with the kernel
ezgmaplocationComposer package
ezieComposer package
ezjscoreshipped with the kernel
ezmbpaexComposer package
ezmultiuploadComposer package
ezodfComposer package
ezoeshipped with the kernel
ezoracleits own repository
ezownerchangeits own repository
ezpaypalComposer package
ezpmComposer package
ezpostgresqlclusterComposer package
ezprestapiComposer package
ezprestapiproviderComposer package
ezsspComposer package
ezstarratingComposer package
eztagsComposer package
ezupdateComposer package
ezurlmultisiteits own repository
ezwebinComposer package
ezwtComposer package
git_managerComposer package
hcaptchaComposer package
ngclasslistComposer package
nxc_powercontentComposer package
owsimpleoperatorComposer package
powercontentits own repository
recaptchaComposer package
sevenx_authentication_2faits own repository
sevenx_dseits own repository
sevenx_themes_mediaits own repository
sevenx_themes_simpleComposer package
sevenx_themes_superComposer package
sqliimportits own repository
str_replaceComposer package
swarkComposer package
syndicationComposer package
xrowextractComposer package
xrowmetadataComposer package

An extension is read when it is a git repository of its own below extension/ whose origin is a se7enxweb repository, or a Composer package of se7enxweb installed there; private extensions and site settings are never read. A site that has other extensions installed gets a larger catalogue when it runs the generator.

How the catalogue is built

Run in the installation root (no database, nothing is loaded or executed; PHP's tokenizer reads the files):

php bin/php/exppatterncatalogue.php            # report which pages would change
php bin/php/exppatterncatalogue.php --write    # write doc/eng-us/standards/patterns/
php bin/php/exppatterncatalogue.php --check    # exit 1 when the pages are out of date

The output depends only on the source: no dates, no commit ids, everything sorted, so a second run on the same code writes the same bytes. Commit the pages with the code change that changes them.

Each category has a rule (the table above and each pattern's page). A class can match several categories. The rules use the class's name, its parent classes and interfaces (followed through the whole code base), its methods (static, abstract) and the registration files of the kernel: module.php (views and policy functions), function_definition.php (fetch functions), eztemplateautoload.php (template operators and functions), cronjobs/ directories, ezpEvent calls and INI settings whose value is a class name. Names are a heuristic: a class called ...Manager is listed as a facade or service even when it is something else, and a pattern implemented without the usual names is missed. Descriptions are the first sentence of each class's doc comment.

Note

The catalogue describes the code as it is, including inherited code. It is not a list of recommendations: for new code, follow the layering and naming rules.

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