bartlomiejbeta/filter-sorter-bundle
QueryBuilder, ParamConverter, Repository patterns), making it a natural fit for Symfony-based APIs but less flexible for non-Symfony PHP applications (e.g., standalone Laravel, Lumen, or custom MVC frameworks).doctrine-specification, which is a clean abstraction for filtering logic but introduces additional dependency management (e.g., resolving specification classes dynamically).ParamConverter integration), but web apps would require manual adaptation (e.g., form handling, frontend integration).QueryBuilder, Repository interfaces).QueryBuilder to Laravel’s Builder or Query classes.FormRequest or manual parsing).spatie/laravel-query-builder + custom specs).doctrine-specification is abandoned (last commit: 2017). May require forks or replacements (e.g., Laravel’s Criteria pattern).| Risk Area | Severity | Mitigation Strategy |
|---|---|---|
| Symfony Lock-in | Critical | Abstract core logic; replace Symfony deps. |
| Deprecated Dependencies | High | Replace doctrine-specification with Laravel alternatives (e.g., spatie/laravel-query-builder). |
| Query Builder Mismatch | High | Create adapters for Laravel’s Builder/Query. |
| ParamConverter Gaps | Medium | Implement custom route middleware for query parsing. |
| Maintenance Burden | High | Bundle is unmaintained; expect breaking changes. |
spatie/laravel-query-builder + custom filter logic).doctrine-specification or use Laravel’s Criteria pattern.beberlei/doctrineextensions (for query filtering) or build a lightweight solution.QueryBuilder vs. Laravel’s Builder/Query.ContainerInterface vs. Laravel’s Container).EventDispatcher) and ParamConverter reliance.Request object can manually parse query strings (e.g., filter[field]=value).| Step | Action | Laravel Equivalent/Alternative |
|---|---|---|
| 1 | Replace QueryBuilder |
Use Laravel’s Builder or Query with adapters. |
| 2 | Replace AbstractEntitySpecificationAwareRepository |
Extend Illuminate\Database\Eloquent\Model or use traits. |
| 3 | Replace doctrine-specification |
Use Laravel’s Criteria pattern or custom interfaces. |
| 4 | Replace ParamConverter |
Use Laravel middleware or FormRequest validation. |
| 5 | Replace FilterQueryManager |
Build a service class to compose filter/sort logic. |
Doctrine\DBAL → Illuminate\Database).EventDispatcher: Replace with Laravel’s Events facade.Serializer: Not needed unless using API Platform-like features.Request can parse filters manually (e.g., request()->query('filter')).where, orderBy).Specification pattern if overkill.class FilterService {
public function apply(Request $request, Builder $query) {
if ($request->has('filter')) {
$query->where($this->parseFilter($request->filter));
}
return $query;
}
}
public function handle(Request $request, Closure $next) {
app(FilterService::class)->apply($request, $request->route()->controller);
return $next($request);
}
FilterQueryManager with Laravel services.// Instead of ParamConverter, use:
$filters = json_decode($request->filter, true);
$query->where($filters);
doctrine-specification may break; forks or replacements needed.spatie/laravel-query-builder or beberlei/doctrineextensions (if Doctrine is used).Builder is optimized for performance; custom adapters may introduce bottlenecks.| Scenario | Impact | Mitigation |
|---|---|---|
| Query Builder Mismatch | Broken filters/sorts | Use Laravel’s Builder directly. |
| Deprecated Doctrine-Specification | Runtime errors | Replace with Laravel Criteria. |
| ParamConverter Missing | API filters ignored | Manual query parsing. |
| Complex Specifications | Performance degradation | Limit spec depth; use raw queries. |
| Laravel Version Incompatibility | Bundle fails to load | Fork and adapt. |
QueryBuilder/Repository patterns.How can I help you explore Laravel packages today?