doniyorbekm
@doniyorbekm
Yii-шник

Фильтры в GridView Yii2?

Не получается сделать фильтры к GridView в Yii2 - инпуты и селекты вообще не реагируют.
Контроллер:
$dataprovider = new ActiveDataProvider([
           'query' => StUsers::find(),
            'pagination' => [
                'pagesize' => 10,
            ],
            'sort' => [
                'defaultOrder' => [
                    'id' => SORT_DESC,
                ],
            ],
        ]);
        $searchModel = new StUsers();
        return $this->render('index', [
            'dataProvider' => $dataprovider,
            'searchModel' => $searchModel
        ]);

Модель
public function search($params) {
        $query = StUsers::find();
        $dataProvider = new ActiveDataProvider([
           'query' => $query,
        ]);

        if(!($this->load($params) && $this->validate())) {
            return $dataProvider;
        }

        $query->orFilterWhere(['LIKE', 'fullname', $this->fullname]);
        return $dataProvider;
    }

Представление:
echo GridView::widget([
               'dataProvider' => $dataProvider,
               'filterModel' => $searchModel,
               'columns' => [
                   'id',
                   'fullname',
                   [
                       'attribute' => 'phone_number',
                       'content'=>function($data){
                           return "+".$data['phone_number'];
                       },
                   ],
  • Вопрос задан
  • 561 просмотр
Пригласить эксперта
Ответы на вопрос 1
mhthnz
@mhthnz
PHP, YII2, Golang, Linux
А где у вас в модели обработка поля phone_number потерялась? И почему у вас orFilterWhere?
Вам надо добавить в rules, поле phone_number, чтобы оно заполнялось. И в функции search добавить поиск по нему:
public function rules()
{
	return [
		[['fullname', 'phone_number', 'safe'],
	];
}

public function search($params) 
{
    $query = StUsers::find();
    $dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);

    if(!($this->load($params) && $this->validate())) {
        return $dataProvider;
    }
    $query->andFilterWhere(['LIKE', 'phone_number', $this->phone_number]);
    $query->andFilterWhere(['LIKE', 'fullname', $this->fullname]);
    return $dataProvider;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы