Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Filters Laravel Package

spiral/filters

Spiral Filters provides a simple way to define, validate, and apply request-driven filters to query builders in Spiral apps. Build reusable filter sets, map input to conditions, and keep controllers thin while supporting pagination, sorting, and clean APIs.

View on GitHub
Deep Wiki
Context7

Getting Started

  1. Install via Composer: composer require spiral/filters.
  2. Create your first filter class by extending Spiral\Filters\Filter and defining validation rules in the defineRules() method.
  3. Use the Filterable trait on your query builder or collection to apply filters: (new Filterable($query))->apply($filterInstance).
  4. Start with request-driven filtering: instantiate your filter using FilterFactory (or make() helper in Spiral apps), passing request data.

Example:

class UserFilter extends Filter
{
    protected function defineRules(): array
    {
        return [
            'status' => ['string', Rule::in(['active', 'inactive'])],
            'role'   => ['string', Rule::in(['admin', 'user'])],
        ];
    }
}

Implementation Patterns

  • Composable Pipelines: Chain multiple filters via Pipeline::add() for layered criteria (e.g., UserFilterDateRangeFilter).
  • Conditional Application: Use Filter::onlyWhen($condition) to apply filters only when contextually relevant (e.g., admin-only fields).
  • Query Builder Integration: Extend filters to return query constraints (e.g., override apply() to modify QueryBuilder).
  • DTO-style Hydration: Use filters to safely hydrate objects from untrusted input—filters validate and transform (e.g., null'active', or cast to enum).
  • Test Isolation: Unit-test filters independently—verify rules, mappings, and constraints without database interaction.

Gotchas and Tips

  • No Auto-Routing: Filters don’t auto-resolve; use explicit instantiation or DI container (make() or InjectorInterface).
  • Rule vs. Mapping Confusion: defineRules() handles validation; defineMap() handles input → property mapping. Don’t conflate them—validation without mapping loses data intent.
  • Empty Input Handling: Empty/missing keys pass validation by default. Use required() or custom rules if absence is an error.
  • Operator Extensibility: Override validateValue() or register custom Rule classes for domain-specific checks (e.g., UniqueEmail).
  • Legacy Notice: Last release in 2020—ensure compatibility with newer PHP versions and Laravel (10+). Consider forking if active maintenance is critical.
  • Framework Dependency: Despite being a standalone package, its documentation assumes Spiral Framework patterns. Adapt DI/container bindings for non-Spiral apps.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle
atriumphp/atrium
sandermuller/package-boost-laravel
sandermuller/boost-skills
redaxo/core
yusufgenc/filament-api-forge
l3aro/rating-star-for-filament
leek/filament-subtenant-scope