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

Web framework developers: start here

Where developers who know Symfony, Laravel, Slim, CodeIgniter, Yii, CakePHP, Laminas, Django, Rails, Express or Spring start with Exponential - what it is in their terms, the first hour, a map of every page that…

Download as PDF

Address: https://doc.exponential.earth/learninminutes/exphelp/viewer/help/web-framework-developers/web-framework-developers-start-here.md

On this page

Web framework developers: start here

This section of the help is for developers who know a web framework (Symfony, Laravel, Slim, CodeIgniter, Yii, CakePHP, Laminas, Django, Rails, Express, Spring) and want to build on Exponential. Exponential describes itself as "a professional PHP application framework with advanced CMS (content management system) functionality" (README). These pages translate what you already know into Exponential's terms, say plainly where something works differently, and say just as plainly where Exponential has no direct equivalent.

Every class, setting and command named on these pages was checked against the kernel, the settings or the existing documentation. Where a page compares with another framework, it describes what that framework is known for, without judging it.

Contents

  1. Exponential in one paragraph
  2. Your first hour
  3. Five things that are different
  4. Map of the pages
  5. Pages from other audiences you will use
  6. Finding these pages again

Exponential in one paragraph

Exponential 6 is a free and open source PHP application framework and content management system under the GNU GPL, version 2 or later. A request enters index.php, is matched to a siteaccess (a named configuration per site, language or administration), translated from a URL alias to a /<module>/<view> address, checked against roles and policies, handled by a module view, rendered with the template language and placed into the pagelayout. Data editors manage lives in content classes with versions and translations; your own tables use eZPersistentObject. Configuration is INI files in layers; code lives in extensions installed with Composer. It is served by Apache or nginx with PHP-FPM, by Exponential Velocity, a persistent-worker server that is part of the product as of 6.0.15, or by FrankenPHP. The code base was developed from 1999, first under the name eZ Publish, which its creator discontinued after almost 18 years; 7x continued it as Exponential (Who is 7x?).

Your first hour

  1. Install (10 minutes): ./console exp:install --apply gives a site on SQLite (Installing in one command).
  2. Orient (10 minutes): Exponential for web framework developers and your "coming from" page (Symfony, Laravel, Slim, CodeIgniter, Yii, CakePHP or Laminas, Django or Rails, Express or Spring).
  3. Translate (10 minutes): the concept dictionary.
  4. Follow a request (10 minutes): The request lifecycle.
  5. Build something (20 minutes to start): Task: build a small CRUD module.

Five things that are different

  1. Content is the model. Editorial data is a content class with versions, translations and permissions, not a table you design (The content model for ORM users).
  2. Siteaccess before routing. A whole configuration is chosen per request (Siteaccesses).
  3. No service container. Handlers are named in INI settings (Dependency injection).
  4. Templates do not escape automatically and are overridden rather than extended (The view layer).
  5. Persistent workers. Under Velocity, code must not keep per-request state in statics (Servers and deployment).

Map of the pages

Orientation

PageWhat it helps you do
Exponential for web framework developersSee the whole picture in framework terms
Concept dictionaryLook up your framework's word and find the Exponential one
Reading pathRead the pages in a sensible order
When to choose Exponential, and when a plain frameworkDecide fairly for a project

Coming from another framework

PageWhat it helps you do
Coming from SymfonyMap bundles, kernel events, Doctrine, Forms and Security
Coming from LaravelMap routes, Eloquent, Blade, middleware, queues and Artisan
Coming from Slim, CodeIgniter, Yii, CakePHP or LaminasMap classic MVC and micro framework habits
Coming from Django or RailsMap URLconf, ORMs, the admin, signals and commands
Coming from Express or SpringUnderstand the PHP process model and map the rest

The request

PageWhat it helps you do
The request lifecycleKnow where your code runs, from index.php to the output filters
Siteaccesses: matching a request to a siteConfigure sites, languages and the administration per request
Routing: modules, views and parametersDeclare addresses and generate URLs
Pretty URLs: URL aliases and URL wildcardsUse slugs, redirects and rewrites without code
Controllers: module viewsWrite a view as a script or a class, and change kernel views
Responses, redirects, errors and JSONReturn pages, redirects, errors and JSON

Views and templates

PageWhat it helps you do
The view layer: the template language beside Twig and BladeWrite templates and avoid the classic mistakes
Template resolution: designs and overridesKnow which file renders and override it
Getting data into templates: fetch functions and operatorsGive templates data and helpers

Data

PageWhat it helps you do
The content model for ORM usersModel editorial data as classes, objects, versions and nodes
ORM and active record: eZPersistentObjectMap your own tables to classes
Queries: content fetches, eZDB and SQLQuery content and tables portably
Migrations and seed data: .dba schema files and packagesShip and upgrade schemas and seed data

Configuration and wiring

PageWhat it helps you do
Configuration: INI files instead of YAML, PHP arrays or .envRead, layer and change settings
Environments and secrets: EXP_ENV and settings/overrideRun dev, test and prod, and keep secrets out of Git
Dependency injection and services: what existsWire testable code without a container
Extension points: handlers, INI registration and overridesFind the right place to plug in
Packages: extensions, Composer and bundlesStructure and distribute your code

Request handling, events and security

PageWhat it helps you do
Middleware: request rules, input and output listenersDo what middleware does
Events and listeners: ezpEventSubscribe to kernel events and emit your own
Workflows and triggers: hooks on content operationsRun steps before and after publishing and checkout
Authentication and sessionsSign users and machines in
Authorization: roles, policies and limitationsDeclare and check permissions
Forms and CSRF protectionHandle forms safely
Validation: input, datatypes and escapingValidate input and escape output

Performance and languages

PageWhat it helps you do
Caching: the layers and how to invalidate themCache correctly and clear the right thing
HTTP caching and reverse proxiesUse headers, the HTTP cache and the response cache
Translations, locales and right-to-leftTranslate the interface and the content

Background work, APIs and operations

PageWhat it helps you do
Command line: the console and eZScriptRun and write commands
Queues and background jobsMove slow work out of requests
Scheduled tasks: cronjobsRun work on a schedule
REST and JSON APIsPick the right API layer
Headless and decoupled front endsServe content to another front end
Testing: PHPUnit, database tests and checksTest without fear
Debugging, logging and errorsSee inside a request and read the logs
Servers and deployment: Apache and PHP-FPM, Velocity, FrankenPHPServe and deploy

Exponential with other frameworks

PageWhat it helps you do
Mixing Exponential and a frameworkCombine both in one project
The Symfony legacy bridge for framework developersRun Exponential 6 inside Symfony
The Exponential Platform productsChoose a Symfony-based distribution

Hands-on, checks and reference

PageWhat it helps you do
Task: build a small CRUD module step by stepBuild every piece once by hand
Ten pitfalls for framework developersAvoid the mistakes everyone makes first
Checklists for framework developersEvaluate, set up, review and go live
Web framework developer FAQGet quick answers
Glossary for web framework developersLook up an Exponential term

Pages from other audiences you will use

PageWhy
Application creators: start hereThe detailed guides behind most pages here: modules, datatypes, workflows, queues, REST, deployment
Extension development: the bookEvery extension point, step by step, from user to maintainer
PHP developers: start hereThe PHP side: language, conventions and the kernel's classes
Software engineers: start hereArchitecture, quality and engineering practice
The template languageThe language in depth, with Smarty comparisons
Kernel architectureThe authoritative description of the kernel's layers
Extension pointsThe catalogue of every extension point
Database supportThe supported databases and how each is tested

Finding these pages again

In the help, filter by the audience Web Framework Developers; the pages live in the folder web-framework-developers. Search for a framework's name ("Symfony", "Laravel", "Django") to find the comparison that mentions it.

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