Download the PHP package polysource/easyadmin-filter-bridge without Composer
On this page you can find all versions of the php package polysource/easyadmin-filter-bridge. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download polysource/easyadmin-filter-bridge
More information about polysource/easyadmin-filter-bridge
Files in polysource/easyadmin-filter-bridge
Package easyadmin-filter-bridge
Short Description Polysource — drop-in package that enriches EasyAdmin v5 filters (ranges, multi-select, custom filter types, session persistence, chips) without forking EasyAdmin.
License MIT
Homepage https://github.com/polysource/polysource
Informations about the package easyadmin-filter-bridge
polysource/easyadmin-filter-bridge
Drop-in package that enriches the filters of an existing EasyAdmin v5 app without forking EasyAdmin. Plugs into EasyAdmin's
FilterConfiguratorInterfaceextension point.
Status
v0.5.7 published (2026-05-15). API release-candidate stable —
committed for v0.5.x, breaking changes allowed before v1.0 (cf.
ADR-012).
Distributed on Packagist as
polysource/easyadmin-filter-bridge.
Feature-complete on the bridge side, dogfooded on multi-tenant client integrations through v0.5.7:
- All 8 built-in EasyAdmin filters covered by an Enhancer
(
DateTime,Boolean,Text,Numeric,Choice,Comparison,Array,Entity). - 4 custom filter types:
BetweenDateFilter,InFilter,NotNullFilter,FullTextSearchFilter. - Twig templates auto-register via
PrependExtensionInterface— enhanced widget HTML renders with zero config. - Filter session persistence via
FilterSessionPersistenceSubscriberonBeforeCrudActionEvent— operators returning to the index page see their previous filters restored automatically (scoped per CRUD controller FQCN, no leak across resources). - 8 polysource routes auto-import via
Bundle::boot()since v0.5.4 — no manualroutes.yamlimport needed in the host. - Multi-kernel safe since v0.5.7 — bundle is a no-op on EA-less kernels.
- Multi-tenant ready since v0.5.7 — opt out of auto-route
registration via
auto_register_routes: falseto mount under a custom prefix (e.g./{channel}/admin).
What it does
Once installed, EasyAdmin's built-in filters gain richer form types, without any change to your existing CRUD controllers:
| Built-in filter | Enhancement |
|---|---|
DateTimeFilter |
Dedicated block prefix (polysource_enhanced_datetime_filter) + presets (today / last 7 days / …) + show_clear button. |
BooleanFilter |
Optional include_null flag — adds a third "Empty / Null" choice to filter rows where the column is NULL. |
TextFilter |
Optional min_length flag — skip filter for input shorter than the threshold (default 0 = no threshold). |
NumericFilter |
step option (granularity hint, e.g. 0.01 for currency) + quick_ranges buttons. |
ChoiceFilter |
inline option — render choices as pills/badges instead of dropdown. |
ComparisonFilter |
comparisons option — whitelist of operators to expose in the dropdown (default [] = all). |
ArrayFilter |
chip_display option — selected items as removable chips instead of multi-line list. |
EntityFilter |
placeholder option — custom placeholder text for the dropdown / autocomplete. |
Plus, list-level capabilities layered on top:
- Filter chips/tags bar above the table (active filters visible, click X to remove).
- Session persistence of filters per CRUD controller FQCN.
- Saved views dropdown (private / team / public scopes).
- Column visibility dropdown + column reordering.
- Filter-aware streaming export (CSV / XLSX).
- Matching-count JSON endpoint for bulk dry-run preview.
- Filter URL tokens for short shareable filtered URLs.
- Custom filter types:
BetweenDateFilter,InFilter,NotNullFilter,FullTextSearchFilter.
Installation
The bundle auto-registers via Symfony Flex. If you don't use Flex,
add it manually to config/bundles.php:
Zero configuration needed. As soon as the bundle is loaded, the
shipped Configurators auto-tag themselves via EasyAdmin's
registerForAutoconfiguration(FilterConfiguratorInterface::class),
and EasyAdmin's FilterFactory picks them up to mutate filter DTOs
right after they are created.
Frontend assets (filter modal tabs / chips / saved-views)
The richer modal layout (tabs + accordions for dozens of filters) and
the chips bar above the table are powered by Stimulus controllers
shipped under assets/controllers/. EasyAdmin auto-loads them when
the bundle is autoconfigured only if your host app uses
Symfony AssetMapper
or Webpack Encore + StimulusBundle.
If the modal opens flat (no tabs, all filters stacked) or the chips do not appear, your host is most likely missing the AssetMapper wiring. Two-step fix:
- Make sure
symfony/asset-mapperandsymfony/stimulus-bundleare installed andframework.yamlenables both. -
In your
assets/bootstrap.js(orapp.js), confirm the auto-load line is present: - Then make sure EasyAdmin pages include your importmap. EasyAdmin uses its own bundled assets by default and ignores the host importmap, so add it back via your Dashboard:
Without this last step the Stimulus controllers ship in the bundle but never boot on EasyAdmin pages — the modal stays flat.
Saved views (POST routes)
polysource/filter ships a saved-views feature (dropdown, save,
load, delete). The bridge wires the create / delete routes for
EasyAdmin out of the box — they live at:
POST /admin/saved-views(polysource_saved_view_create)POST /admin/saved-views/{id}/delete(polysource_saved_view_delete)
To enable them, add the bridge controller directory to your
config/routes.yaml:
A BeforeCrudActionEvent subscriber also expands ?view=<id> into
the EA filters[...]=... query and redirects to a clean URL — no
host code needed.
Quick start
Take any existing EasyAdmin CRUD controller:
After installing this bridge, the same code automatically:
- The
createdAtfilter renders with the enhanced datetime form type (dedicated block prefix for theme overrides) instead of the stock date picker. - The
isActivefilter accepts aninclude_nulloption (defaultfalse) to show a third "Null" radio choice when the column is nullable.
To opt-in to per-resource overrides, pass formTypeOptions to the
upstream filter:
How the seam works
No EasyAdmin code is modified. We only attach more services to the existing extension point.
The full audit trail of seams used (and one that is not available —
the EntityRepositoryInterface returns Doctrine\ORM\QueryBuilder,
which blocks non-Doctrine sources) is in
ADR-012 §Vérification technique.
Writing your own enhancer
Want to add a custom Configurator (e.g. a richer TextFilter with
mode-toggle "exact / starts-with / contains")? The pattern is small:
With Symfony's autowiring + autoconfiguration (default), it gets
auto-tagged ea.filter_configurator. Done. No service.yaml entry,
no compiler pass, no fork.
Testing
Unit tests live in tests/Unit/Configurator/ — they instantiate real
FilterDto instances (not mocks), run our supports() + configure(),
and assert the DTO mutations. EntityDto and AdminContext are final
in EasyAdmin v5, so the tests use
(new ReflectionClass(...))->newInstanceWithoutConstructor() to
satisfy the typehints without coupling to internal shape — the
Configurators never read either argument.
Compatibility
- PHP 8.4+ (will widen to 8.2+ in v0.5+)
- Symfony 7.4 LTS (will widen to 6.4+ in v0.5+)
- EasyAdmin
^4.24 || ^5.0
Architectural decisions
- ADR-012 — Dual-product positioning —
why this bridge exists alongside
polysource/adminstandalone. - ADR-016 — Bridge contracts shared with polysource/filter —
the
ChipFormatterInterfaceboundary between the bridge and the standalone primitive.
License
MIT — see LICENSE.
All versions of easyadmin-filter-bridge with dependencies
easycorp/easyadmin-bundle Version ^4.24 || ^5.0
polysource/filter Version ^0.1 || ^0.5 || ^0.7 || ^0.9
symfony/config Version ^5.4 || ^6.0 || ^7.0 || ^8.0
symfony/dependency-injection Version ^5.4 || ^6.0 || ^7.0 || ^8.0
symfony/form Version ^5.4 || ^6.0 || ^7.0 || ^8.0
symfony/http-kernel Version ^5.4 || ^6.0 || ^7.0 || ^8.0
symfony/translation Version ^5.4 || ^6.0 || ^7.0 || ^8.0
symfony/yaml Version ^5.4 || ^6.0 || ^7.0 || ^8.0