PHPackages                             pistol88/yii2-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. [Validation &amp; Sanitization](/categories/validation)
4. /
5. pistol88/yii2-filter

ActiveYii2-extension[Validation &amp; Sanitization](/categories/validation)

pistol88/yii2-filter
====================

yii2-filter add options and filters to your model

150631PHP

Since Apr 24Pushed 9y ago1 watchersCompare

[ Source](https://github.com/pistol88/yii2-filter)[ Packagist](https://packagist.org/packages/pistol88/yii2-filter)[ RSS](/packages/pistol88-yii2-filter/feed)WikiDiscussions master Synced 4w ago

READMEChangelogDependenciesVersions (1)Used By (1)

Внимание!
=========

[](#внимание)

Разработка модуля с 24.04.2017 ведется здесь: [dvizh/yii2-filter](https://github.com/dvizh/yii2-filter). Рекомендую устанавливать модуль из репозиторий Dvizh, именно там находится последняя версия.

Yii2-filter
===========

[](#yii2-filter)

Модуль позволит добавлять опции для любой вашей модели в админке, а снаружи фильтровать результаты выдачи по выбранным опциям (в том числе ajax).

Функционал:

- Добавление фильтров (они же опции)
- Присвоение разных фильтров разным моделям (по значению поля)
- Управление вариантами опций
- Фильтрация ActiveQuery по значению фильтра
- Набор виджетов

[![options](https://cloud.githubusercontent.com/assets/8104605/15528166/cfe6a88c-225a-11e6-8667-133de2da2dbe.png)](https://cloud.githubusercontent.com/assets/8104605/15528166/cfe6a88c-225a-11e6-8667-133de2da2dbe.png)

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

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

Выполнить команду

```
php composer require pistol88/yii2-filter "*"

```

Или добавить в composer.json

```
"pistol88/yii2-filter": "*",

```

И выполнить

```
php composer update

```

Далее, мигрируем базу:

```
php yii migrate --migrationPath=vendor/pistol88/yii2-filter/migrations

```

Подключение и настройка
-----------------------

[](#подключение-и-настройка)

В конфигурационный файл приложения добавить модуль filter, настроив его

```
    'modules' => [
        //...
        'filter' => [
            'class' => 'pistol88\filter\Module',
            'relationFieldName' => 'category_id', //Наименование поля, по значению которого будут привязыватья опции
            //callback функция, которая возвращает варианты relationFieldName
            'relationFieldValues' =>
                function() {
                    //Пример с деревом:
                    $return = [];
                    $categories = \common\models\Category::find()->all();
                    foreach($categories as $category) {
                       if(empty($category->parent_id)) {
                            $return[] = $category;
                            foreach($categories as $category2) {
                                if($category2->parent_id == $category->id) {
                                    $category2->name = ' --- '.$category2->name;
                                    $return[] = $category2;
                                }
                            }
                       }
                    }
                    return \yii\helpers\ArrayHelper::map($return, 'id', 'name');
                },
        ],
        //...
    ]
```

Управление фильтрами: ?r=filter/filter

Для модели, с которой работает фильтр, добавить поведение:

```
    function behaviors() {
        return [
            'filter' => [
                'class' => 'pistol88\filter\behaviors\AttachFilterValues',
            ],
        ];
    }
```

Чтобы иметь возможность также фильтровать результаты Find, подменяем Query в модели:

```
    public static function Find()
    {
        $return = new ProductQuery(get_called_class());
        return $return;
    }
```

В ProductQuery должно быть это поведение:

```
    function behaviors()
    {
       return [
           'filter' => [
               'class' => 'pistol88\filter\behaviors\Filtered',
           ],
       ];
    }
```

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

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

Получить опции и их значения из модели, в которой есть поведение AttachFilterValues:

```

            :

```

Получить значения одной опции по коду:

```
