В чем суть DataFilter?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Bio man
Сообщения: 609
Зарегистрирован: 2013.07.22, 10:40

В чем суть DataFilter?

Сообщение Bio man » 2018.02.10, 18:14

Обнаружил такую новую модельку https://github.com/yiisoft/yii2/blob/ma ... Filter.php
Но толковой документации с примерами не нашел.
Кто нибудь использовал? В чем вообще преимущество в сравнении с обычной search model?

Bio man
Сообщения: 609
Зарегистрирован: 2013.07.22, 10:40

Re: В чем суть DataFilter?

Сообщение Bio man » 2018.02.10, 19:35


yan
Сообщения: 942
Зарегистрирован: 2011.03.23, 09:28
Откуда: Уфа

Re: В чем суть DataFilter?

Сообщение yan » 2018.02.16, 22:18

Док то есть, но очень краткий и из него не понятно, как использовать новую фичу с виджетами типа гридвью. Разобрался в результате, но это не то, чтобы очевидно и элементарно.
Еще так и осталось непонятно - как подразумевается кастомизировать создание условий?
Как например сделать поиск лайком для определенного поля(аттрибута)? Нашел возможность сделать это через изменении свойства conditionBuilders, но это как-то больше похоже на хак чем на решение.

demogorgorn
Сообщения: 30
Зарегистрирован: 2014.02.22, 00:08

Re: В чем суть DataFilter?

Сообщение demogorgorn » 2018.02.27, 23:40

yan писал(а):
2018.02.16, 22:18
Док то есть, но очень краткий и из него не понятно, как использовать новую фичу с виджетами типа гридвью. Разобрался в результате, но это не то, чтобы очевидно и элементарно.
Еще так и осталось непонятно - как подразумевается кастомизировать создание условий?
Как например сделать поиск лайком для определенного поля(аттрибута)? Нашел возможность сделать это через изменении свойства conditionBuilders, но это как-то больше похоже на хак чем на решение.
Так расскажите, пожалуйста, более подробно как пользоваться. Спасибо!

yan
Сообщения: 942
Зарегистрирован: 2011.03.23, 09:28
Откуда: Уфа

Re: В чем суть DataFilter?

Сообщение yan » 2018.02.28, 01:05

demogorgorn писал(а):
2018.02.27, 23:40
Так расскажите, пожалуйста, более подробно как пользоваться. Спасибо!
как-то так, будут рад коментам, как это м.б. сделать лучше

контролер

Код: Выделить всё

 // здесь м.б. просто User, но надо учесть что ActiveDataFilter анализирует валидаторы, определяя по ним тип данных
 $searchModel                       = new UserSearch();
        $filter                            = new  ActiveDataFilter([
            'searchModel'         => $searchModel,
            'filterAttributeName' => $searchModel->formName()
        ]);
        // тот самый хак, по другому не нашел как кастомизировать условия для отдельного атрибута, возможно плохо искал
        $filter->conditionBuilders['name'] = function ($operator, $condition) {
            return ['LIKE', $operator, $condition];
        };
        $filter->load(request()->get());

        $query = User::find();

        if ($filterConditions = $filter->build()) {
            $query->andFilterWhere($filterConditions);
        }

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);
        return $this->render('index', [
            'dataProvider' => $dataProvider,
            'filter'       => $filter,
        ]);
вьюха

Код: Выделить всё

<?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $filter->searchModel,...

demogorgorn
Сообщения: 30
Зарегистрирован: 2014.02.22, 00:08

Re: В чем суть DataFilter?

Сообщение demogorgorn » 2018.02.28, 08:25

Спасибо! Буду разбираться

andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: В чем суть DataFilter?

Сообщение andku83 » 2018.02.28, 12:13

а то что стандартно генерируется gii не обладает нужным функционалом?
вот пример

yan
Сообщения: 942
Зарегистрирован: 2011.03.23, 09:28
Откуда: Уфа

Re: В чем суть DataFilter?

Сообщение yan » 2018.02.28, 14:25

shnir писал(а):
2018.02.28, 12:13
а то что стандартно генерируется gii не обладает нужным функционалом?
вот пример
датафильтр может делать примерно тоже, но автоматом без расписывания по атрибутам, можно теоретически даже SearchModel не заводить

Ответить