Я настроил GridView для подбора моей таблицы в Yii2.0 следующим образом:
<?= \yii\grid\GridView::widget([ 'dataProvider' => $model->dataProvider, 'filterModel' => $model->searchModel, 'columns' => [ [ 'label' => Yii::t( $cat, 'Id' ), 'value' => 'id', ], [ 'label' => Yii::t( $cat, 'Title' ), 'format' => 'raw', 'value' => function ( $data ) { if ( $data['status_code'] != 5 ) { return Html::a( $data['title'], '/signer/view/' . $data['id'] ); } else { return $data['title']; } }, ], [ 'label' => Yii::t( $cat, 'Description' ), 'value' => 'description', ], [ 'label' => Yii::t( $cat, 'Filename' ), 'value' => 'filename', ], [ 'label' => Yii::t( $cat, 'Status' ), 'value' => 'status', 'contentOptions' => function ( $data ) { $statuses = [ 1 => 'text-primary', # New 2 => 'text-warning', # Unsigned 3 => 'text-warning', # Partially signed 4 => 'text-success', # Signed 5 => 'text-danger', # Deleted ]; return [ 'class' => $statuses[$data['status_code']] ]; } ], [ 'label' => Yii::t( $cat, 'Created' ), 'value' => 'created', ], //[ 'class' => 'yii\grid\ActionColumn' ], ], ]); ?>
Я получаю все правильные данные, но вместо входных данных фильтра я получаю пустые строки.
Почему это? Что мне не хватает?
PS: Сама модель поиска отлично работает, то есть, когда я добавляю URL-адрес ?title=asd
он действительно получает результаты поиска!
Согласно документации свойства $filterModel
:
Обратите внимание, что для отображения поля ввода для фильтрации столбец должен иметь свой собственный
yii\grid\DataColumn::$attribute
или установитьyii\grid\DataColumn::$filter
как код HTML для поля ввода.
Поэтому вам нужно установить свойство yii\grid\DataColumn::$attribute
в своих столбцах, и в большинстве случаев это делает ненужным value
:
<?= \yii\grid\GridView::widget([ 'dataProvider' => $model->dataProvider, 'filterModel' => $model->searchModel, 'columns' => [ [ 'label' => Yii::t( $cat, 'Id' ), 'attribute' => 'id', ], [ 'label' => Yii::t( $cat, 'Title' ), 'format' => 'raw', 'attribute' => 'title', 'value' => function ( $data ) { if ( $data['status_code'] != 5 ) { return Html::a( $data['title'], '/signer/view/' . $data['id'] ); } else { return $data['title']; } }, ], [ 'label' => Yii::t( $cat, 'Description' ), 'attribute' => 'description', ], [ 'label' => Yii::t( $cat, 'Filename' ), 'attribute' => 'filename', ], [ 'label' => Yii::t( $cat, 'Status' ), 'attribute' => 'status', 'contentOptions' => function ( $data ) { $statuses = [ 1 => 'text-primary', # New 2 => 'text-warning', # Unsigned 3 => 'text-warning', # Partially signed 4 => 'text-success', # Signed 5 => 'text-danger', # Deleted ]; return [ 'class' => $statuses[$data['status_code']] ]; } ], [ 'label' => Yii::t( $cat, 'Created' ), 'attribute' => 'created', ], //[ 'class' => 'yii\grid\ActionColumn' ], ], ]); ?>
Другая возможная причина для пустой строки: (не в постерах точный случай)
Отсутствие / неправильное объявление public function rules()
в модели поиска. В Yii 1 вы можете объединить строку, в Yii2 они должны быть действительными элементами массива.
return [ [['authorId, title, publishFrom'], 'safe'], //WRONG [['authorId', 'title', 'publishFrom'], 'safe'], //CORRECT ];