Skip to content
GitLab
  • Menu
Projects Groups Snippets
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • A Active Controller
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 2
    • Issues 2
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Container Registry
    • Infrastructure Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • deck-web
  • Active Controller
  • Merge requests
  • !16

#56688

  • Review changes

  • Download
  • Email patches
  • Plain diff
Merged Кадыров Денис Раисович requested to merge #56688 into master Dec 18, 2025
  • Overview 0
  • Commits 3
  • Changes 5

#56688

  • Реализовал возможность добавления кастомных полей фильтрации в Active Controller
  • добавил доку и phpdoc на методы

4. Кастомные фильтры

Библиотека поддерживает добавление пользовательских полей фильтрации, которые не привязаны к атрибутам модели. Это позволяет создавать сложные фильтры с собственной логикой валидации и применения.

Настройка кастомных фильтров

Определите метод customFilters() в вашем контроллере:

namespace app\controllers;

use deck\ActiveController\ActiveController;
use app\models\Product;
use yii\db\ActiveQuery;

class ProductController extends ActiveController
{
    public $modelClass = Product::class;

    public function customFilters()
    {
        return [
            // Поиск по нескольким полям
            'search' => [
                'rules' => [
                    ['search', 'required'],
                    ['search', 'string', 'min' => 3, 'max' => 100],
                ],
                'label' => 'Поиск',
                'apply' => function(ActiveQuery $query, $value) {
                    $query->andWhere(['or',
                        ['ilike', 'name', $value],
                        ['ilike', 'description', $value]
                    ]);
                }
            ],
            
            // Фильтр по диапазону дат
            'date_range' => [
                'rules' => [
                    [['from', 'to'], 'required'],
                    [['from', 'to'], 'date', 'format' => 'php:Y-m-d'],
                ],
                'label' => 'Диапазон дат',
                'apply' => function(ActiveQuery $query, $value) {
                    $query->andWhere(['between', 'created_at', $value['from'], $value['to']]);
                }
            ],
            
            // Фильтр без валидации (опционально)
            'in_stock' => [
                'apply' => function(ActiveQuery $query, $value) {
                    if ($value === 'true') {
                        $query->andWhere(['>', 'stock_quantity', 0]);
                    }
                }
            ]
        ];
    }
}
Структура кастомного фильтра

Каждый фильтр может содержать:

  • rules (опционально) - массив правил валидации в формате Yii2. Поддерживает все стандартные валидаторы и i18n.
  • label (опционально) - метка атрибута для сообщений об ошибках.
  • apply (обязательно) - функция применения фильтра к ActiveQuery. Получает объект запроса и значение фильтра.
Примеры использования
# Поиск по тексту
GET /products?filter[search]=laptop

# Фильтр по диапазону дат
GET /products?filter[date_range][from]=2024-01-01&filter[date_range][to]=2024-12-31

# Комбинация кастомных и стандартных фильтров
GET /products?filter[category_id]=5&filter[search]=laptop&filter[in_stock]=true
Обработка ошибок

При неудачной валидации API вернет ошибку 422:

   "error": {
      "name": "Unprocessable entity",
      "message": "Необрабатываемый экземпляр",
      "code": "031x00005",
      "status": 422,
      "type": "deck\\exceptions\\ValidationException",
      "fields": {
        "search2": [
          "Значение «Поиск» должно содержать минимум 3 символа."
        ]
      }
  },
Edited Dec 18, 2025 by Кадыров Денис Раисович
Assignee
Assign to
Reviewer
Request review from
Time tracking
Source branch: #56688