monterhealth/api-filter-bundle
MonterHealth ApiFilterBundle adds request-driven filtering to Doctrine queries in Symfony APIs. Declare allowed filters on entities, map query parameters automatically, and keep controllers clean while supporting flexible, validated search endpoints.
Architecture fit — unchanged: the framing problem remains. Release 2.6.0 is maintenance-only for a Symfony bundle, not a Laravel package. The changes are Symfony/DI hygiene: replacing deprecated tagged wiring with tagged_iterator, converting DI XML config to PHP, PHP 8.4 deprecation cleanup, .gitattributes updates, and sandbox progress messages. None of that adds a Laravel service provider, Eloquent integration, or framework-agnostic packaging. From a Laravel application’s perspective, architecture fit remains low unless we treat the package as a reference implementation or grammar source rather than a dependency.
The reusable asset is still the filter/order parsing domain logic, contingent on how tightly it is bound to Doctrine QueryBuilder/DQL. 2.6.0 does not change that calculus.
Integration feasibility — three paths unchanged:
spatie/laravel-query-builder, using this package only as a feature benchmark. Lowest risk, lowest ownership cost.Technical risk — provenance slightly improved; dominant risks unchanged. 2.6.0 is a positive maintenance signal: the maintainer is active and addressing Symfony/PHP deprecations, including PHP 8.4 awareness. That marginally lowers abandonment risk. It does not address the core concerns: zero dependents, likely bus factor of one, no Laravel version claims, no evidence of production adoption, and unverified test/CI coverage. The highest-severity functional risk remains the filterable/sortable field allowlist — unvalidated user input mapped to columns or operators can cause query errors, full-table scans, wrong results, or injection. Review the 2.6.0 diff to confirm whether any public filter/order API changed; the release notes suggest DI/internal maintenance only, but that must be verified. The earlier release-date metadata anomaly should still be checked against actual tag history, though 2.6.0 confirms ongoing publishing activity.
Key questions:
QueryBuilder/DQL?Stack fit. Unchanged. The package targets Symfony HTTP + Doctrine query layers; our stack is Laravel HTTP + Eloquent. The mismatch is at the query layer. Request parsing is cheap to reimplement; query construction is where the useful logic and the risk sit. 2.6.0’s DI modernization is Symfony-only and does not improve Laravel fit.
Migration path. Fork or vendor a pinned copy → isolate filter grammar and criteria objects → strip Symfony DI and Doctrine compilation → implement an Eloquent criteria-to-builder adapter → cover with conformance tests. Pin to a commit SHA; do not take a floating constraint on a single-maintainer package. Review the 2.6.0 diff before pinning to confirm no behavioural or public API changes.
Compatibility. 2.6.0 shows attention to PHP 8.4 deprecations, which is a useful signal, but there are still no Laravel compatibility claims. Assume nothing about Laravel 10/11/12 support; verify Composer constraints explicitly against our supported runtimes.
Sequencing.
spatie/laravel-query-builder. If the delta is cosmetic, stop — this remains the likely and cheapest outcome.Maintenance. 2.6.0 is a positive signal that the maintainer is active, but it does not change the ownership model. Zero dependents and a single maintainer mean we would still be adopting a fork, not a supported dependency. Budget ongoing ownership for security patching, PHP/Laravel version bumps, and bug triage with no upstream backstop. That remains the largest cost line and should drive the go/no-go more than code quality.
Support. Self-support only. Expect source and a README as the primary documentation. No vendor, SLA, or meaningful community escalation path.
Scaling. Application-tier cost remains negligible. The scaling risk is query cost: permissive filters become expensive predicates, and complex ordering over large tables can produce filesorts that only appear under production data volumes. The allowlist and pagination caps are the real controls, and they belong to us.
Failure modes.
Ramp-up. The codebase is small and the domain is well understood, so a mid-level engineer can be productive in days. The real onboarding cost is reverse-engineering the grammar from source, since documentation is thin. Recommend a single owner and a written internal spec of the filter grammar so the fork does not become tribal knowledge.
How can I help you explore Laravel packages today?