Software engineering
Software engineering on Exponential: architecture, the request cycle, caching, testing and quality.
40 pages
- Software engineers: start here Where software engineers start who evaluate, architect, operate, review or contribute to Exponential as a system. The system in one paragraph, your first hour, five engineering rules, and a map of every page for…
- Exponential for software engineers The whole system on one page for an engineer from any language background - runtime, stack, process model, data stores, configuration, extension model, quality gates and release rules, each with the file or document…
- Architecture overview The layers of an Exponential installation and what each is responsible for - servers, the kernel entry points, the domain classes, the libraries, the presentation layer, extensions, settings and var/ - with the…
- The request lifecycle What happens between a browser request and the response in Exponential, step by step - maintenance and repair hooks, autoload, the kernel constructor, siteaccess matching, URL translation, access checks, the module run…
- Kernel, lib and extensions: the layering The dependency rules between lib/, kernel/classes, kernel/private, the module controllers, the designs and extensions - which layer may call which, where the rules are not met yet, how names show which layer code…
- Siteaccesses and configuration How Exponential is configured - INI files read through eZINI, the order in which override directories win, siteaccess matching, per-environment variants with EXP_ENV, configuration managed by the deployment, secrets in…
- Modules, views and access control How Exponential routes a request to code and decides whether the user may run it - modules, views and policy functions in module.php, class-based views, roles, policies and limitations, the access checks of the dispatch…
- The content model for engineers The Exponential content model as a data model - classes and attributes defined at run time, objects with versions and translations, nodes in a tree, datatypes that own storage and validation, sections, object states and…
- Persistence and the database layer How Exponential talks to its database - the eZDB factory and drivers, eZPersistentObject as the table mapper, transactions that nest by counting, the SQL query cache, isolation levels, and the rules every query must…
- The template engine and the design chain How Exponential renders HTML - the eZTemplate engine that compiles .tpl files to PHP, operators and functions registered from settings, fetch functions as the only data access, the design chain and override rules that…
- Events, extension points and plugins How behavior is added to Exponential without forking it - the in-process event bus ezpEvent with notify and filter, handlers named in settings, datatypes, workflow event types, template operators, fetch functions, login…
- Console, cronjobs and background work How work runs outside a web request in Exponential - the console and its command discovery, eZScript, cronjob parts run by runcronjobs.php, content jobs for large content operations, the expqueue job queue for…
- Writing portable SQL How to write queries that run on every database Exponential supports - escaping and casting, limits as parameters, the dialect differences of each driver (row limits, ids, concatenation, MD5, bitwise operators, joined…
- Cache invalidation and clearing How Exponential invalidates its caches on its own (eZContentCacheManager on publish, the content/cache event, expiry timestamps, query cache table tracking) and how to clear them by hand by id or tag, which change needs…
- Concurrency, statics and long-lived processes How to write Exponential code that is correct when one PHP process serves many requests and many processes serve one site - static caches and singletons, idempotent registrations, exit and cleanExit, class_exists guards…
- Performance measurement and benchmarks How to measure Exponential's performance before and after a change - exp:benchmark in its http, kernel, micro and baseline modes, the micro benchmark CI runs on every push, the debug bar's timing and SQL figures…
- Observability: logs, debug bar and audit trail What an Exponential installation tells you about itself and where - the kernel logs and their rotation, the request logs 404.log and security.log, the log viewer and exp:logs, error references, the debug bar, the…
- Deploying a change How a PHP, settings, template or stylesheet change reaches every runtime that serves an Exponential site - the steps of exp:velocity deploy and why their order matters, PHP-FPM reloads and OPcache, Velocity restarts…
- Internationalization and right to left The internationalization model of Exponential for engineers - locales from CLDR data, content languages stored as bits of a language mask with a limit of 62, translation catalogues in Qt Linguist format, fallbacks…
- Testing strategy How Exponential is tested and how to test your own changes - the layers from syntax checks and static analysis to DB-less PHPUnit suites, database tests, live-installation tests, design and quality tests, benchmarks and…
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