c975l / core-bundle
The base of the c975L ecosystem in a single package: ConfigBundle (database-backed configuration, EasyAdmin dashboard, user accounts, health check, sitemaps) and UiBundle (page blocks, media library, theme, legal models, forms, emails). Two bundles, one package, one release.
Package info
Type:symfony-bundle
pkg:composer/c975l/core-bundle
Requires
- php: >=8.4
- doctrine/orm: ^3.6
- dragonmantank/cron-expression: ^3.6
- easycorp/easyadmin-bundle: ^5.1
- egulias/email-validator: ^4.0
- imagine/imagine: ^1.5
- nelmio/security-bundle: ^3.9
- sensiolabs/minify-bundle: ^1.2
- symfony/asset-mapper: ^8.0
- symfony/clock: ^8.0
- symfony/console: ^8.0
- symfony/filesystem: ^8.0
- symfony/finder: ^8.0
- symfony/form: ^8.0
- symfony/http-client: ^8.0
- symfony/mailer: ^8.0
- symfony/messenger: ^8.0
- symfony/password-hasher: ^8.0
- symfony/process: ^8.0
- symfony/scheduler: ^8.0
- symfony/security-bundle: ^8.0
- symfony/serializer: ^8.0
- symfony/ux-chartjs: ^3.3
- symfony/yaml: ^8.0
- symfonycasts/reset-password-bundle: ^1.25
- symfonycasts/verify-email-bundle: ^1.18
- twig/intl-extra: ^3.26
- vich/uploader-bundle: ^2.9
Requires (Dev)
- chrome-php/chrome: ^1.16
- doctrine/doctrine-fixtures-bundle: ^4.3
- phpunit/phpunit: ^13.2
- symfony/browser-kit: ^8.0
- symfony/css-selector: ^8.0
- symfony/maker-bundle: ^1.67
- symfony/phpunit-bridge: ^8.0
- symfony/rate-limiter: ^8.1
- symfony/var-dumper: ^8.0
Suggests
- ext-imagick: To upload an SVG as favicon or apple-touch-icon: GD has no SVG decoder, so without it those two roles only accept raster images (see SvgRasterizer).
- chrome-php/chrome: To run "c975l:ui:layout-audit", which measures a rendered page against the layout invariants the sass tests cannot check. Install it in the consuming site, not here: the command runs from that site's console.
Replaces
- c975l/config-bundle: 6.0.0
- c975l/ui-bundle: 1.18.0
README
The base of the c975L ecosystem in a single package: ConfigBundle (database-backed configuration, EasyAdmin dashboard, user accounts, health check, sitemaps) and UiBundle (page blocks, media library, theme, legal models, forms, emails). Two bundles, one package, one release.
One package, two bundles
This is not a merged bundle. A Composer package is not a Symfony bundle: this package ships the two bundles unchanged, each with its own namespace, its own services.yaml, its own configs.json, its own translation domain and its own dashboard section.
CoreBundle/
├── composer.json ← the only one
├── ConfigBundle/ → c975L\ConfigBundle\
└── UiBundle/ → c975L\UiBundle\
There is no c975L\CoreBundle\ namespace. The name core-bundle exists on Packagist only.
Why they ship together
ConfigBundle and UiBundle referenced each other in their composer.json, in both directions:
- Ui → Config is deep and deliberate:
ConfigServiceInterfaceis read everywhere, and every*ProviderInterfaceof the generic registry mechanism is declared in ConfigBundle. - Config → Ui comes from the dashboard itself (
FontRegistry,FormThemeRegistry,StylesheetManagementRegistry,ScriptAdminRegistry,WhatsNewRegistry) and from user accounts (Form/FormField+EmailService).
Two packages that require each other cannot be released independently, and neither can see the other's work-in-progress — only its last published version. They were never two layers; they were one layer billed as two. This package says so out loud.
Installation
composer require c975l/core-bundle
Then register both bundles — they remain two entries:
// config/bundles.php return [ // ... c975L\ConfigBundle\c975LConfigBundle::class => ['all' => true], c975L\UiBundle\c975LUiBundle::class => ['all' => true], ];
Documentation
Each bundle keeps its own README, unchanged:
Its history, on the other hand, is the package's: ChangeLog.md and UPGRADE.md carry both bundles from here on. Each bundle's own files stop at its last published release — v5.17.1 for ConfigBundle, v1.17.0 for UiBundle — and are kept as archives.
Quality checks
The five checks the CI runs live in composer.json alone, as one list:
composer qa
composer run -l names what each one covers, and each is callable on its own (composer cs, fixer, stan, stan-scaffold, test). The workflow calls those same scripts, so a check is never declared twice.
A development machine's vendor/ symlinks the sibling repositories, which expose code no tag has published yet — code the CI never sees. bin/ci.sh replays composer qa on a copy of the repository whose dependencies are resolved from Packagist, uncommitted changes included:
bin/ci.sh
Migrating from c975l/config-bundle / c975l/ui-bundle
See UPGRADE.md. In short: replace the two requirements with c975l/core-bundle. No PHP use, no @c975LUi/… template reference, no translation key and no bundles.php entry changes — the namespaces are the same ones.
License
MIT — see LICENSE.