Recent changes
Wednesday November 04 2026
-
Writing a custom datatype Updated Markdown page
Add a new field type to Exponential - the eZDataType subclass, registration in content.ini, storage in the attribute columns, input and validation, view and edit templates, and the RAD datatype wizard.
-
Custom modules and views Updated Markdown page
Build the screens of an application as module views - registering a module, ordered and unordered parameters, handling POST actions, returning a result, redirecting, errors, and the class-based form of a view.
-
Database access and SQL Updated Markdown page
Talk to the database safely and portably - eZDB, arrayQuery and query, escaping and casting, transactions, the six supported engines and what differs between them, and when to use eZPersistentObject instead.
-
The datatype life cycle Updated Markdown page
When the kernel calls each eZDataType method - class attribute editing, object creation, edit and validation, store and publish, copy and translation, trash and removal, search, sorting, string and package…
-
DB-less PHPUnit tests Updated Markdown page
Write fast PHPUnit tests for extension code that need no database - the bootstrap, loading your classes, testing services, validators, datatype string round trips and template operators, and running only the tests of a…
-
Debugging and logs Updated Markdown page
Find out what your application does - debug output and the debug bar, template path comments, eZDebug in code, the log files and Setup > Logs, error references, request logs, and debugging under Velocity.
-
Deploying with Velocity Updated Markdown page
Ship code changes to a site served by Exponential Velocity - exp:velocity deploy and its fourteen steps in order, the options for kernel classes, packed assets and Apache-only setups, template-only changes, and checking…
-
A deployment pipeline Updated Markdown page
Move an application from a developer machine through test to production safely - environments with EXP_ENV, Git and Composer for code, packages and upgrade steps for data, the deploy command, maintenance mode, rollback…
-
Setting up a development environment Updated Markdown page
A development setup for Exponential applications - PHP, Composer and Git, a local install on SQLite, Velocity or the built-in server, development settings, the debug bar, template checks and your extension in its own…
-
Environment settings and secrets Updated Markdown page
Keep settings that differ per machine and secrets out of code - EXP_ENV and settings variants, settings/override for the installation, file modes, what never goes into Git, and how an application reads its keys.
-
Exponential as an application platform Updated Markdown page
What Exponential gives an application out of the box - content model, permissions, versions, languages, modules, templates, workflows, cron, REST, queues, AI - and how to decide what to build on it and what to keep…
-
Exponential Intelligence (expai) for applications Updated Markdown page
What the expai extension offers an application - drafts written as the editor, providers and data policy, the job queue, usage and budgets, audit - how to switch it on, and how an application plugs into it.
-
Extending Exponential Intelligence Updated Markdown page
Extend expai from your own extension - a field action by settings, a tool the assistant can call (expAiTool), a provider for another AI service (expAiProvider), panel sections, JavaScript hooks and the registries the…
-
Anatomy of an extension Updated Markdown page
Every directory and file an extension can have - modules, classes, autoloads, design, settings, datatypes, event types, cronjobs, bin, share, sql, translations, doc - plus extension.xml, ezinfo.php and composer.json…
-
Fetch functions: reading data in templates Updated Markdown page
Read data in templates with fetch() - the content fetches (node, object, list, tree, list_count, related objects), their parameters (filters, sorting, limits, attribute filters), the other modules' fetches, and…
-
Forms, CSRF protection and HTTP input Updated Markdown page
Handle forms safely in views - reading input with eZHTTPTool and module actions, form tokens from ezformtoken, POST-redirect-GET, validation messages, safe redirects, uploads with eZHTTPFile, and JSON posts from scripts.
-
Headless Exponential Updated Markdown page
Use Exponential as a content back end for apps and JavaScript front ends - the REST API, expservices, rendered XHTML, images, URLs, preview, caching, permissions, and what stays easier with the built-in templates.
-
Input validation and output escaping Updated Markdown page
Treat every input as untrusted and every output as needing escape - casting and allow lists in PHP, validating view parameters and posts, wash in templates for HTML and attributes, URLs, JSON and SQL, and the common…
-
JSON endpoints with ezjscore Updated Markdown page
Give your pages' JavaScript a JSON back end with ezjscore server functions - the [ezjscServer_<name>] block, the static method, the call URL and answer envelope, permission checks, form tokens, and when to use…
-
module.php reference: views, parameters and functions Updated Markdown page
Every key of a module definition - $Module, $ViewList entries (script, functions, params, unordered_params, actions, navigation part, ui context) and $FunctionList with limitations - with the kernel code that reads each…