idct / sonata-admin-mongodb-bundle
Symfony Sonata / Integrate Doctrine MongoDB ODM into the SonataAdminBundle
Package info
github.com/ideaconnect/sonata-admin-mongodb-bundle
Type:symfony-bundle
pkg:composer/idct/sonata-admin-mongodb-bundle
Requires
- php: ^8.4
- ext-mongodb: *
- doctrine/collections: ^2.0
- doctrine/mongodb-odm: ^2.6
- doctrine/mongodb-odm-bundle: ^5.0
- doctrine/persistence: ^4.0
- sonata-project/admin-bundle: ^4.39
- sonata-project/exporter: ^3.0
- sonata-project/form-extensions: ^2.0
- symfony/config: ^7.4 || ^8.0
- symfony/dependency-injection: ^7.4 || ^8.0
- symfony/doctrine-bridge: ^7.4 || ^8.0
- symfony/form: ^7.4 || ^8.0
- symfony/http-kernel: ^7.4 || ^8.0
- symfony/property-access: ^7.4 || ^8.0
- twig/twig: ^3.0
Requires (Dev)
- doctrine/data-fixtures: ^2.0
- friendsofphp/php-cs-fixer: ^3.95
- infection/infection: ^0.33.1
- matthiasnoback/symfony-config-test: ^6.1
- matthiasnoback/symfony-dependency-injection-test: ^6.2
- phpstan/extension-installer: ^1.1
- phpstan/phpdoc-parser: ^1.0
- phpstan/phpstan: ^1.0 || ^2.0
- phpstan/phpstan-phpunit: ^1.0 || ^2.0
- phpstan/phpstan-strict-rules: ^1.0 || ^2.0
- phpstan/phpstan-symfony: ^1.0 || ^2.0
- phpunit/phpunit: ^11.5.38 || ^12.3.10
- rector/rector: ^1.1 || ^2.0
- sonata-project/block-bundle: ^5.0
- symfony/browser-kit: ^7.4 || ^8.0
- symfony/css-selector: ^7.4 || ^8.0
- symfony/dom-crawler: ^7.4 || ^8.0
- symfony/panther: ^2.4
- symfony/security-acl: ^3.3.4
- symfony/twig-bridge: ^7.4 || ^8.0
Conflicts
This package is auto-updated.
Last update: 2026-06-03 11:18:03 UTC
README
Doctrine MongoDB ODM persistence backend for Sonata Admin — full CRUD,
filtering, sorting, pagination, exports and ACL management for MongoDB
documents, the same way sonata-project/doctrine-orm-admin-bundle provides
it for relational databases.
🚨 This is a HARD FORK
idct/sonata-admin-mongodb-bundle is a hard fork of
sonata-project/doctrine-mongodb-admin-bundle,
not a soft fork or a temporary patch:
- The vendor name and Composer package id are different
(
idct/...vs.sonata-project/...) — the two cannot be installed side by side andcomposer replaceis not declared. - The
5.xline already breaks BC in places upstream has not:ModelManager::getDocumentManager()is private,ProxyQuery::__call()is gone,ProxyQuery::setOptions()is removed,ModelFilter::fixIdentifier()rejects malformed input,Pager::countResults()throws when uninitialized, and more. See UPGRADE-5.0.md for the full break list. - Future releases will keep diverging — extending the public API, replacing parts that aren't worth keeping, dropping things upstream still ships. Upstream changes are pulled in selectively, not merged.
- We do not sync release numbers with upstream. Our
5.0.0is the fork's first release; the upstream lineage we forked from is 4.12.0.
If you need exact upstream behaviour, stay on
sonata-project/doctrine-mongodb-admin-bundle. If you want a modernised
base on PHP 8.4+ / Symfony 7.4+ and don't mind moving with us, this is
the right place.
The MIT license, Thomas Rabaix's original copyright, and every upstream contributor's attribution are preserved — see LICENSE and the 74-entry author roster in composer.json.
What this bundle does
Installs next to sonata-project/admin-bundle and provides every
persistence-layer concern Sonata Admin needs in order to drive an admin UI
against a MongoDB collection:
- CRUD —
ModelManagerimplements every CRUD path Sonata calls (create,update,delete,find,findBy,findOneBy,batchDelete,reverseTransform). - Datagrids —
Pager+ProxyQuerywrap the ODMQueryBuilderto give Sonata's listing screens pagination, sorting and a count query routed throughCollection::countDocuments. - Filtering — twelve ready-to-use filter classes you can declare on an
admin:
String,Number,Boolean,Choice,Date,DateRange,DateTime,DateTimeRange,Id,Model(relations),Callback(escape hatch),Empty(null / missing field). String filter understandsEQUAL,NOT_EQUAL,CONTAINS,NOT_CONTAINS,STARTS_WITH,ENDS_WITHwith an optionalcase_sensitiveswitch and full regex-input escaping. - Type guessing — two
TypeGuessers map ODM mapping types (Type::STRING,Type::INT,Type::DATE, …) to Sonata column types and filter types automatically. - Builders —
DatagridBuilder,ListBuilder,ShowBuilderandFormContractormaterialise admin screens fromFieldDescriptions. - Exports —
DataSourceproduces a streaming\Iteratorfor Sonata's exporter; passhydrate: falsefor raw-array CSV/XML/JSON exports bypassing ODM hydration on wide collections. - ACLs —
ObjectAclManipulatorbulk-applies Symfony Security ACE entries to every document of an admin class, batched at 20 docs per flush with progress output. - Dotted paths —
FieldDescriptionFactoryresolves nested paths (author.publisher.name) against ODMClassMetadataand surfaces clear errors when a segment isn't actually an association.
If Sonata Admin can do it for SQL via the ORM bundle, this bundle is the piece that lets you do the same for MongoDB.
Requirements
| Floor | Tested up to | |
|---|---|---|
| PHP | 8.4 | 8.5 |
| Symfony | 7.4 | 8.0 |
| Sonata Admin Bundle | 4.39 | latest 4.x |
| Doctrine MongoDB ODM | 2.6 | latest 2.x |
| Doctrine MongoDB ODM Bundle | 5.0 | latest 5.x |
| Doctrine Persistence | 4.0 | latest 4.x |
| MongoDB server | 4.0+ | 7.x |
Both PHP 8.4 and PHP 8.5 are supported and exercised in CI. Symfony 7.4 (the current LTS) and 8.0 are the only supported Symfony lines.
Installation
Prerequisites
You should already have a Symfony 7.4+ application with Sonata Admin Bundle and Doctrine MongoDB ODM Bundle installed — this bundle is the glue between them, not a replacement for either.
composer require sonata-project/admin-bundle doctrine/mongodb-odm-bundle
Install
composer require idct/sonata-admin-mongodb-bundle
Symfony Flex registers the bundle automatically. If you're not using
Flex, add it to config/bundles.php manually:
return [ // ... Sonata\DoctrineMongoDBAdminBundle\SonataDoctrineMongoDBAdminBundle::class => ['all' => true], ];
Declare an admin
Tag any Sonata Admin service with manager_type: doctrine_mongodb and
Sonata will resolve it through this bundle's implementations:
// config/services.php (Symfony 7+ PHP config) $services->set(App\Admin\BookAdmin::class) ->tag('sonata.admin', [ 'manager_type' => 'doctrine_mongodb', 'model_class' => App\Document\Book::class, 'label' => 'Book', ]);
Optional bundle config
The bundle ships sane defaults; the only config tree it owns is per-type template overrides for list and show columns:
# config/packages/sonata_doctrine_mongo_db_admin.yaml sonata_doctrine_mongo_db_admin: templates: types: list: custom_type: '@App/admin/list_custom.html.twig' show: custom_type: '@App/admin/show_custom.html.twig'
Testing
The test suite has three layers:
- Pure unit tests — fast, no external services. Mock Sonata
interfaces and exercise our classes in isolation. Most of
tests/Builder/,tests/Filter/,tests/FieldDescription/. - Component tests — build an in-memory
DocumentManageragainst a real MongoDB server, persist fixtures, exercise full flows.PagerTest,ProxyQueryTest,ModelManagerTest's integration cases,ObjectAclManipulatorTest. - Functional tests — boot the test kernel
(
tests/App/AppKernel.php) and drive a real Sonata admin in a real browser via Symfony Panther.tests/Functional/.
Layers 2 and 3 need a MongoDB server. Layer 3 additionally needs a Firefox WebDriver.
Quick start (recommended)
docker compose up -d
PANTHER_SELENIUM_HOST=http://127.0.0.1:4444/wd/hub make test
docker-compose.yml brings up:
- a
mongo:latestcontainer on port27017 - a
selenium/standalone-firefox:latestSelenium Grid on port4444
Selenium also exposes noVNC at http://127.0.0.1:7900 (password secret)
if you want to watch the browser drive the suite.
Running individual layers
make test # full suite (needs MongoDB + Firefox) vendor/bin/phpunit tests/Builder # unit tests only vendor/bin/phpunit tests/Functional # functional tests only make coverage # produces build/logs/clover.xml
Local without docker
If you already have MongoDB and a non-snap Firefox + geckodriver on
your PATH, leave PANTHER_SELENIUM_HOST unset:
make test
Panther will start its own Firefox process. This is the path GitHub
Actions uses — see .github/workflows/test.yaml.
Quality gates
The CI workflow runs four gates; matching commands run locally as:
make test # PHPUnit vendor/bin/phpstan --no-progress --memory-limit=1G analyse vendor/bin/rector --no-progress-bar --dry-run make lint-php # PHP-CS-Fixer
All four must be green before a change can land — see AGENTS.md §7 for the definition of done.
Documentation
For the public API and configuration shape, upstream Sonata's documentation applies as-is: docs.sonata-project.org/projects/SonataDoctrineMongoDBAdminBundle.
Fork-specific material:
- AGENTS.md — architectural overview, where each piece lives, how it fits next to Sonata Admin, contribution rules.
- UPGRADE-5.0.md — 4.x → 5.0 break list (per-class).
- CHANGELOG.md — per-release notes.
Support
For bugs or feature ideas in this fork, open an issue on the fork's repository.
For general Sonata Admin questions, the upstream StackOverflow tag remains the best place.
License
MIT. Thomas Rabaix's original copyright and every upstream contributor's attribution are preserved; the full author roster lives in composer.json.