pugx/filter-bundle
PUGXFilterBundle brings annotation-driven filtering to Symfony and Doctrine: mark filterable entity fields, then render a form that automatically builds DQL queries from user input, giving you searchable, sortable list pages without hand-writing query logic.
Architecture fit — the deciding finding. pugx/filter-bundle is a Symfony bundle, not a Laravel package. It is constructed around the Symfony bundle/DI-extension model, the Symfony Form component, Doctrine ORM entity metadata, and kernel request handling. None of these have a supported equivalent in Laravel's service-provider, Eloquent, or HTTP-kernel model. There is no service provider, no config/filter.php, and no facade — Composer autodiscovery will not wire it. For a Laravel application the fit is poor to none, and this is a "wrong framework" finding rather than a "needs a thin adapter" finding. The correct comparison class is Spatie Query Builder, Eloquent Filter, or an in-house filter abstraction.
What the package actually does. It turns request parameters into Doctrine QueryBuilder conditions via annotations/attributes declared on entities: you write a FilterType extending the bundle's base form type, bind the request, receive an immutable Filter value object, and apply it to a builder. The value is real but is entirely bound to the Symfony Form + Doctrine combination.
Integration feasibility. Two positions only:
Technical risk.
Key questions for the review.
Stack fit. Against a Laravel reference architecture: does not fit — do not attempt it. Against a Symfony + Doctrine reference architecture: fits cleanly, as a conventional narrowly scoped bundle that plugs into the Form and Doctrine layers without imposing its own runtime.
Migration path. There is no migration path into Laravel, and none should be attempted.
config/bundles.php, annotate the target entities. v1.7.1 is a drop-in from v1.7.0 — no config or code changes.FiltersQuery/scope class that whitelists keys and applies when()/filled() clauses. Record this bundle as explicitly out of scope so it is not re-proposed.Compatibility. Patch-level and backward compatible. The behavioural change is that filter forms are now identified by name rather than ordinal position, and no longer persist values between requests. Code that indexed into the filter form collection numerically, or that relied on stale values surviving a request, can observe different behaviour. Audit custom form themes, Twig templates, and tests that index into the collection before upgrading.
Sequencing.
Maintenance. Low ongoing effort for an adopting Symfony team — small surface, stable behaviour. The risk is not churn but the absence of it: low release cadence means upstream fixes arrive slowly and any workaround we write we carry indefinitely. Budget for the possibility of vendoring or forking if the project stalls, and note the LGPL-3.0 obligations that come with a modified fork.
Support. Community-only. No vendor SLA, no commercial backing, no escalation path beyond an upstream issue. Acceptable for a presentation-layer concern; it must not become load-bearing for anything with an availability commitment.
Scaling. Stateless by design after this patch and therefore not a horizontal-scaling constraint. Cost scales with query complexity rather than request volume. Note the familiar trap: Contains produces LIKE '%term%', which cannot use a B-tree index — on large tables prefer prefix search or a full-text index, and ensure every filterable column is actually indexed. Loose application of entity attributes also invites N+1 queries; that is code-review discipline, not a package defect.
Failure modes.
Ramp-up. For a Symfony-fluent engineer: under a day — it follows framework conventions and the three classes that matter (FilterType, FilterBuilder/Filter, the annotation classes) are quick to learn. For a Laravel-only team: effectively not ramp-up-able. The prerequisite knowledge is bundles, DI extensions, Doctrine metadata, and Symfony Forms — a multi-week learning curve for a capability with cheaper native alternatives. Treat onboarding cost as prohibitive and route the team elsewhere.
Recommendation. Approve v1.7.1 as a routine patch for any Symfony service already consuming this bundle, contingent on the numeric-index audit and, where long-lived workers are used, a two-request state-bleed regression test. Do not introduce it into the Laravel estate; record the framework mismatch and the 7-star bus factor as the deciding factors and close the evaluation for Laravel-scoped work.
How can I help you explore Laravel packages today?