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

Legacy bridge: run Exponential 6 inside the Symfony platform

This page is for teams that move an Exponential 6 site to the Symfony platform, or that want Twig on the public site while editors keep the legacy admin. Reference: Legacy bridge bundle specification.

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/features/6.0/legacy-bridge.md

On this page

Legacy bridge: run Exponential 6 inside the Symfony platform

This page is for teams that move an Exponential 6 site to the Symfony platform, or that want Twig on the public site while editors keep the legacy admin. Reference: Legacy bridge bundle specification.

Repositories: se7enxweb/legacy-bridge (Composer package, repository legacyBridge), se7enxweb/ibexa-legacy-bridge (Platform 4 port), se7enxweb/site-legacy-bundle, se7enxweb/ngsymfonytools, se7enxweb/exponential-legacy-installer.

What it is

The legacy bridge is a Symfony bundle that loads the Exponential 6 kernel (the system you are reading about) inside a Symfony platform installation. One web application then serves both worlds:

  • the legacy admin and legacy templates (your .tpl files, your extensions, your content classes), through the siteaccess named legacy_admin;
  • the new stack (Twig templates, Symfony routes, REST, GraphQL, the Platform admin interface).

Both read the same database. Content that editors create in the legacy admin shows up on the Twig front end, and the other way around.

Why you would use it

  • You have an Exponential 6 site and want to move to the Symfony platform without freezing editors out. Run both until the migration is done.
  • You want Twig, Symfony routing or the Exponential Layouts page builder for the public site, but your editors keep the familiar legacy admin.
  • You keep legacy extensions (for example ezjscore, eztags, ezwebin) available in a platform project.

Which version for which platform

The package has one line per platform generation: the Platform 2.5 line is tagged on master, the later lines each have their own branch. Tags are listed in the release history.

Branch / tagsPlatformSymfonyPHPRequires
master (v2.1.10 to v2.1.12, 2025-08 to 2026-04)eZ Platform 2.5 LTS3.48.x with fixesthe Exponential legacy kernel
3.x (3.0.0.1 to v3.0.0.37, 2026-03-25 to 04-11)eZ Platform 3.35.4^8.0se7enxweb/exponential ^6.0.12, ezsystems/ezplatform-kernel ~1.3
4.x (v4.0.0.0 to v4.0.0.3, 2026-04-06 to 04-17)Ibexa 4.6 compatible installs5.4^8.0se7enxweb/exponential dev-main
5.x (v5.0.0.0, v5.0.1 to v5.0.10)Platform v57.4^8.4adds se7enxweb/site-bundle, se7enxweb/site-legacy-bundle, se7enxweb/ngsymfonytools

Install (Platform 2.5 style projects)

composer require --update-with-all-dependencies "se7enxweb/legacy-bridge"
  1. Enable the bundle in app/AppKernel.php: add new eZ\Bundle\EzPublishLegacyBundle\EzPublishLegacyBundle( $this ), at the end of the $bundles array. The $this argument is required.
  2. Prepare the project:
php bin/console ezpublish:legacy:init

The Platform 2.5 line (v2.1.x, on master) has only the ezpublish:* command names; the exponential:legacy:* names described under Console commands do not exist there.

The command prints what to do next: move your legacy files (extensions, settings, optionally designs) into the project, then add the legacy_admin siteaccess to the siteaccess list and site_group it points out. The legacy backoffice needs legacy_mode: true for that siteaccess, which the init step writes at the end of your platform configuration.

  1. Run composer symfony-scripts once or twice so the assets are generated and symlinked.
  2. Optional: allow the legacy setup wizard in app/config/security.yml:
ezpublish_setup:
    pattern: ^/ezsetup
    security: false
  1. Add the legacy rewrite rules to your Apache virtual host so legacy assets are served as files (storage images, design, share/icons, the icon themes of extensions, extension designs, packages/styles, var/storage/packages); an Nginx equivalent is in the bridge's INSTALL.md.
  2. Fix permissions as for any platform project.

Missing legacy extensions that older kernels bundled (ezfind, eztags, the script monitor, the system info extension) are added to the project's composer.json with composer require.

Cache behaviour

By default the bridge also clears the platform's persistence (SPI) cache when the legacy content view cache is cleared, and bin/console cache:clear clears it too. Switch each off in the platform configuration:

FileKeyDefaultEffect
platform config (for example app/config/ezplatform.yml)ez_publish_legacy.clear_all_spi_cache_from_legacytrueclear SPI cache when the legacy view cache is cleared
sameez_publish_legacy.clear_all_spi_cache_on_symfony_clear_cachetrueclear SPI cache on cache:clear
sameez_publish_legacy.enabledtruebridge on or off
sameez_publish_legacy.root_dirnonepath of the legacy root; must exist
sameez_publish_legacy.legacy_aware_routesempty listroutes (or route prefixes) allowed while legacy_mode is on
siteaccess scopeez_publish_legacy.<scope>.legacy_modeunsetlet the legacy kernel handle URL aliases
siteaccess scopeez_publish_legacy.<scope>.templating.view_layoutunsetTwig pagelayout used when a content view is rendered in legacy
siteaccess scopeez_publish_legacy.<scope>.templating.module_layoutunsetTwig pagelayout for legacy modules (legacy pagelayout otherwise)

Console commands

The bridge's six commands were renamed in April 2026, on the 3.x, 4.x and 5.x lines only. The old names stay as deprecated aliases there, so scripts keep working.

Bridge lineCommand names available
master (v2.1.10 to v2.1.12, Platform 2.5)only the old ezpublish:* names
3.x up to v3.0.0.29only the old ezpublish:* names
3.x from v3.0.0.30exponential:legacy:*, with the old names as aliases
4.x v4.0.0.0 and v4.0.0.1only the old ezpublish:* names
4.x from v4.0.0.2exponential:legacy:*, with the old names as aliases
5.x (all tags)exponential:legacy:*, with the old names as aliases
CommandOld name (alias)Does
exponential:legacy:initezpublish:legacy:initprepares the platform installation for legacy use
exponential:legacy:configureezpublish:configurecreates platform configuration from an existing legacy directory
exponential:legacy:install-extensionsezpublish:legacybundles:install_extensionsinstalls legacy extensions that Symfony bundles define (symlink by default)
exponential:legacy:symlinkezpublish:legacy:symlinkinstalls legacy settings and design files from src into ezpublish_legacy/
exponential:legacy:assets-installezpublish:legacy:assets_installinstalls legacy assets and front controller wrappers (for example index_cluster.php)
exponential:legacy:scriptezpublish:legacy:scriptruns a legacy CLI script in the bridged kernel

Example: run a legacy script with the platform's database settings. The script path is relative to the legacy root; every further option is passed on to the legacy script, and --legacy-help shows the script's own help:

php bin/console exponential:legacy:script bin/php/ezcache.php --legacy-help
php bin/console exponential:legacy:script bin/php/ezcache.php --clear-id=content --siteaccess=legacy_admin

SQLite

Since v4.0.0.1 (2026-04-07) a platform installation on SQLite can run the legacy kernel too. The bridge maps the Doctrine driver pdo_sqlite to the legacy DatabaseImplementation=sqlite3 setting and injects the database file path into the legacy site.ini [DatabaseSettings] Database. Before that fix the bridge stopped with "Could not map database driver". See SQLite for the platform.

What changed over time

  • 2025-08: first Exponential releases (v2.1.10): the wrapper install command accepts a quoted web directory when installed through Composer, vendor names switched to se7enxweb.
  • 2026-02: admin design admin3 replaces admin2 as the default design of the legacy_admin siteaccess (v2.1.11), see the responsive admin.
  • 2026-03: branch 3.x: ported to Symfony 5.4 and PHP 8: new TreeBuilder API, Symfony contracts events, RequestEvent / ResponseEvent, typed config resolver, Twig 3, DI-registered commands with constructor injection (no ContainerAwareCommand), permission resolver API of platform 3.
  • 2026-04: branch 4.x: Ibexa 4.6 service aliases, session handling for Symfony 5.3+ (factory based sessions), SQLite, command rename, extra GUI chrome for legacy_admin through the ngsite extension.

Limits

  • The upstream project stated that the bridge is not supported on eZ Platform 3.x because the schema would diverge from the legacy one. The se7enxweb branches keep the legacy schema in place for the platform kernels listed above; use the branch that matches your platform.
  • The ledger of the repository records the checked-out branch (4.x); branches 3.x and 5.x carry their own tags.

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