PHPackages                             betocampoy/champs-filter - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Search &amp; Filtering](/categories/search)
4. /
5. betocampoy/champs-filter

ActiveLibrary[Search &amp; Filtering](/categories/search)

betocampoy/champs-filter
========================

Reusable filter component for parsing, building and applying filters (Doctrine and Legacy support)

v1.0.2(1mo ago)06MITPHPPHP &gt;=8.1

Since Apr 13Pushed 1mo agoCompare

[ Source](https://github.com/betocampoy/champs-filter)[ Packagist](https://packagist.org/packages/betocampoy/champs-filter)[ RSS](/packages/betocampoy-champs-filter/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependenciesVersions (4)Used By (0)

BetoCampoy Champs Filter
========================

[](#betocampoy-champs-filter)

Componente reutilizável para construção, parsing e aplicação de filtros em aplicações PHP, com suporte a núcleo desacoplado e bridges para Doctrine e Legacy.

Pacote
------

[](#pacote)

- **Composer:** `betocampoy/champs-filter`
- **Namespace base:** `BetoCampoy\Champs\Filter`

Objetivo
--------

[](#objetivo)

O `betocampoy/champs-filter` foi criado para padronizar a forma como filtros são:

- interpretados
- estruturados
- aplicados
- reconstruídos para a interface
- serializados em query string

A proposta é permitir reutilização entre múltiplos projetos, mantendo o núcleo desacoplado e concentrando integrações específicas em bridges próprias.

Estrutura
---------

[](#estrutura)

```
betocampoy/
  champs/
    filter/
      composer.json
      README.md
      src/
        Core/                # Núcleo independente (Parser, Payload, Rule, Scope, builders)
        Contract/            # Interfaces e contratos auxiliares
        Bridge/
          Doctrine/          # Aplicação em QueryBuilder (Doctrine)
          Legacy/            # Aplicação em Model legado
        Integration/
          Symfony/           # Serviços base para uso com Symfony
          Legacy/            # Serviços base para uso no sistema legado
        Result/              # Objetos de retorno padronizados

```

Instalação
----------

[](#instalação)

### Via path repository

[](#via-path-repository)

No `composer.json` do projeto consumidor:

```
{
  "repositories": [
    {
      "type": "path",
      "url": "../betocampoy/champs/filter"
    }
  ]
}
```

Depois:

```
composer require betocampoy/champs-filter:*
```

Autoload
--------

[](#autoload)

```
"autoload": {
  "psr-4": {
    "BetoCampoy\\Champs\\Filter\\": "src/"
  }
}
```

Exemplo de namespace
--------------------

[](#exemplo-de-namespace)

```
namespace BetoCampoy\Champs\Filter\Core;
```

Uso básico com Symfony
----------------------

[](#uso-básico-com-symfony)

```
use BetoCampoy\Champs\Filter\Integration\Symfony\AbstractSymfonyFilterService;

final class UserFilterService extends AbstractSymfonyFilterService
{
    protected function getFieldMap(): array
    {
        return [
            'name' => 'u.name',
            'email' => 'u.email',
        ];
    }
}
```

Observações
-----------

[](#observações)

- A bridge Legacy continua dependendo de `App\LegacySrc\Core\Model`
- O Core não depende de Symfony ou Doctrine
- Este pacote já está pronto para teste inicial, mas pode evoluir com mais contratos, testes e padronização de operadores

Próximos passos sugeridos
-------------------------

[](#próximos-passos-sugeridos)

- adicionar testes automatizados
- padronizar operadores e aliases
- criar configuração Symfony mais plugável
- reduzir ainda mais o acoplamento da bridge Legacy

Autor
-----

[](#autor)

Beto Campoy

###  Health Score

38

—

LowBetter than 83% of packages

Maintenance90

Actively maintained with recent releases

Popularity5

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity44

Maturing project, gaining track record

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~5 days

Total

3

Last Release

47d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/f716b40e59d9e04a7a6ce607fb14866a53a5160e31456676ec379f25e324e58b?d=identicon)[betocampoy](/maintainers/betocampoy)

### Embed Badge

![Health badge](/badges/betocampoy-champs-filter/health.svg)

```
[![Health](https://phpackages.com/badges/betocampoy-champs-filter/health.svg)](https://phpackages.com/packages/betocampoy-champs-filter)
```

###  Alternatives

[shyim/opensearch-php-dsl

OpenSearch/Elasticsearch DSL library

186.7M12](/packages/shyim-opensearch-php-dsl)[awesome-nova/dependent-filter

Dependent filters for Laravel Nova

26190.2k](/packages/awesome-nova-dependent-filter)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
