PHPackages                             alvariumsoft/laravel-filters - 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. [Utility &amp; Helpers](/categories/utility)
4. /
5. alvariumsoft/laravel-filters

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

alvariumsoft/laravel-filters
============================

The Laravel Filters.

1.0.6(6y ago)1126MITPHPPHP ^7.2

Since Mar 26Pushed 5y ago1 watchersCompare

[ Source](https://github.com/alvariumsoft/laravel-filters)[ Packagist](https://packagist.org/packages/alvariumsoft/laravel-filters)[ RSS](/packages/alvariumsoft-laravel-filters/feed)WikiDiscussions master Synced 2d ago

READMEChangelogDependencies (1)Versions (8)Used By (0)

laravel-filters
===============

[](#laravel-filters)

[![Laravel 6](https://camo.githubusercontent.com/030af145b96df0cca8e8ceffcadd859c1416578f97e1aaa82abd4c5b648d74e3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d362d6f72616e67652e7376673f7374796c653d666c61742d737175617265)](http://laravel.com)[![License](https://camo.githubusercontent.com/30597ff9a350144f03bffdd9183e16468e0b3ca1193e1d08591d992622738d55/687474703a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d627269676874677265656e2e7376673f7374796c653d666c61742d737175617265)](https://tldrlegal.com/license/mit-license)

Пакет для работы с фильтрами в Laravel-6

- Фильтры для магазинов и каталогов.
- ЧПУ и GET параметры.
- Кеширование.
- Работают с дефолтными настройками.
- Набор примеров, которые можно переделать под частные задачи.

Установка
---------

[](#установка)

Установка пакета с помощью Composer.

```
composer require alvariumsoft/laravel-filters

```

Добавьте в файл `config/app.php` вашего проекта в конец массива `providers` :

```
Alvarium\Filters\FiltersServiceProvider::class,
```

После этого выполните в консоли команду публикации нужных ресурсов:

```
php artisan vendor:publish --provider="Alvarium\Filters\FiltersServiceProvider"

```

Использование
-------------

[](#использование)

В файле `config\filters.php` находится массив, в котором нужно указать классы сервисов. Например:

```
'state' => \App\Alvarium\Filters\Services\Data\Defaults\DefaultState::class,
```

Классы для своих сервисов нужно создавать в папке `app\Alvarium`.

Класс сервиса должен иметь соответствующее пространство имен: `namespace App\Alvarium\Filters\Services\Data`. Так же класс сервиса должен включать соответствующий интерфейс и реализовывать его методы.

Примеры
-------

[](#примеры)

В публикуемых папках Defaults (App\\Alvarium\\Filters\\Services\\Data\\Defaults) есть примеры всех сервисов по умолчанию. Для большинства случаев их будет достаточно. Если же нужно изменить или дополнить функциональность, создаем по примерам свои сервисы и подключаем их в файле конфигурации.

Принцип работы
--------------

[](#принцип-работы)

Допустим мы имеем следующие таблицы и соответствующие им модели (приведены основные поля):

```
categories:
id
name
slug
category_id

products:
id
name
price
properties - json
category_id

properties:
id
name
type
sort

property_enums:
id
property_id
value
slug
sort

```

Свойства в таблице products должны храниться в поле properties (json) в таком виде:

```
{"property_1": "property_value_2", "property_2": "property_value_4", "property_3": "property_value_11", "property_4": "property_value_22", "property_5": "property_value_24", "property_9": "property_value_54", "property_10": "property_value_55"}

```

Где значения - это slug property\_enums. Если у вас поля или таблицы сходны по структуре, но называются иначе, вы можете их просто переименовать в сервисе `\App\Alvarium\Filters\Services\Data\Defaults\DefaultState::class`.

У нас есть маршрут фильтров для подкатегорий:

```
Route::get('/catalog/{category}/{subcategory}/filter/{param1?}/{param2?}', 'CategoryController@subcategory')->name('subcategory');
```

Т.е. два первых параметра фильтров уйдут в сегменты, о стальные в GET параметры.

У нас есть action контроллера:

```
    // Класс фильтров регистрируется в сервис контейнере в сервис провайдере, поэтому мы можем сделать инъекцию прямо в контроллере.
    public function subcategory(Filters $filters, Request $request, Category $category, Category $subcategory, ...$params)
    {
        $categories = Category::with('categories')->whereNull('category_id')->get();

        // Получаем менеджер фильтров, передаем параметры в сегментах, все GET-параметры, название маршрута, параметры не являющиеся фильтрами
        $filterManager = $filters->getManager($params, $request->all(), 'subcategory', [$category, $subcategory]);

        // Получаем массив фильтров
        $filters = $filterManager->getFilters();
        // Получаем массив выбрвнных фильтров
        $chosenFilters = $filterManager->getChosenFilters($filters);

        // Получаем ид отфильтрованных товаров
        $productIds = $filterManager->getProductIds(Product::where('category_id', $subcategory->id));

        $products = Product::with('category')->whereIn('id', $productIds)->paginate(10);

        return view('catalog', compact('categories', 'products', 'filters', 'chosenFilters'));
    }
```

Сервисы
-------

[](#сервисы)

В папку `app\Alvarium` публикуется структура папок сервисов и все сервисы по умолчанию, которые подойдут для большинства случаев. Вы можете по образу создать свои сервисы и переподключить их в файле `config\filters.php`.

```
        'state' => \App\Alvarium\Filters\Services\Data\Defaults\DefaultState::class,
```

Сервис для запросов к базе и получения всех необработанных данных из базы. Реализован синглтон, чтобы не было повторных запросов и был доступ в любых других сервисах. Рекомендуется все запросы к базе выполнять только здесь, а потом обрабатывать их сервисами.

```
        'raw_data' => \App\Alvarium\Filters\Services\Data\Defaults\DefaultRawData::class,
```

Сервис для обработки полученных данных из базы, вытягивания и группирования фильтров. Это самый трудоемкий участок, поэтому его результаты кешируются. Кеши нужно бужет сбрасывать при обновлении данных в базе самостоятельно. Время кеша определяется в файле конфигурации.

```
        'receive_filter' => \App\Alvarium\Filters\Services\Filters\Defaults\DefaultReceiveFilter::class,
```

Сервис для генерации классов фильтров, классы также необходимо создать. Класссы фильтров отвечают за формирование конечных данных из сырых дфнных. Сервис отвечает за определение того объекты, какого класса создавать.

```
        'filters_creator' => \App\Alvarium\Filters\Services\Filters\Defaults\DefaultFiltersCreator::class,
```

Сервис формирующий результирующий массив, здесь можно изменить его структуру. Массив формируется с помощью классов, описанных в предыдущем сервисе.

```
        'links_creator' => \App\Alvarium\Filters\Services\Links\Defaults\DefaultLinksCreator::class,
```

Сервис для генерации ссылок.

```
    'middleware' => [
        \App\Alvarium\Filters\Services\Middleware\Defaults\SortFilters::class,
    ],
```

В этом разделе файла конфигурации указываем классы middleware, которые выполнятся по порядку и произведут дополнительные операции над сформированными фильтрами. Они все должны реализовывать интерфейс `Alvarium\Filters\Middlewares\Middleware`. По умолчанию реализована сортировка фильтров.

```
        'params_strategy' => \App\Alvarium\Filters\Services\Params\Defaults\DefaultParamsStrategy::class,
```

Сервис, который разбирает входящие параметры, также здесь можно определить какие будут в сегментах, какие в GET-параметрах.

```
        'query_decorator' => \App\Alvarium\Filters\Services\Queries\Defaults\DefaultQueryDecorator::class,
```

Сервис, который декорирует все запросы по выбранным фильтрам, чтобы отфильтровать продукты. Также в этом неймспейсе определяем сами запросы.

###  Health Score

26

—

LowBetter than 43% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity11

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity56

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 83.3% of commits — single point of failure

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 ~1 days

Total

7

Last Release

2234d ago

### Community

Maintainers

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

---

Top Contributors

[![dmitryskriplyonok](https://avatars.githubusercontent.com/u/62749553?v=4)](https://github.com/dmitryskriplyonok "dmitryskriplyonok (10 commits)")[![alvariumsoft](https://avatars.githubusercontent.com/u/62753631?v=4)](https://github.com/alvariumsoft "alvariumsoft (2 commits)")

---

Tags

laravelfilters

### Embed Badge

![Health badge](/badges/alvariumsoft-laravel-filters/health.svg)

```
[![Health](https://phpackages.com/badges/alvariumsoft-laravel-filters/health.svg)](https://phpackages.com/packages/alvariumsoft-laravel-filters)
```

###  Alternatives

[livewire/volt

An elegantly crafted functional API for Laravel Livewire.

4195.3M84](/packages/livewire-volt)[gehrisandro/tailwind-merge-laravel

TailwindMerge for Laravel merges multiple Tailwind CSS classes by automatically resolving conflicts between them

341682.2k18](/packages/gehrisandro-tailwind-merge-laravel)[nickurt/laravel-akismet

Akismet for Laravel 11.x/12.x/13.x

97139.6k2](/packages/nickurt-laravel-akismet)[whitecube/laravel-timezones

Store UTC dates in the database and work with custom timezones in the application.

106106.2k](/packages/whitecube-laravel-timezones)[forxer/laravel-gravatar

A library providing easy gravatar integration in a Laravel project.

4235.6k](/packages/forxer-laravel-gravatar)[iteks/laravel-enum

A comprehensive Laravel package providing enhanced enum functionalities, including attribute handling, select array conversions, and fluent facade interactions for robust enum management in Laravel applications.

2516.7k](/packages/iteks-laravel-enum)

PHPackages © 2026

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