Yii2 -使用搜索时,网格视图显示所有数据


Yii2 - Grid view shows all the datas when using search

我已经创建了一个Global Searchgrid view显示,但这是第一次搜索页面加载的问题,或者当搜索字段为空并且您搜索时,数据库中的所有数据都将显示。

和我在另一个视图中使用了_search.php视图。
_search视图:

<?php $form = ActiveForm::begin([
    'action' => ['index'],
    'method' => 'get',
]); ?>

<?= $form->field($model, 'globalSearch') ?> 

<div class="form-group">
    <?= Html::submitButton('Search', ['class' => 'btn btn-primary']) ?>
    <?= Html::resetButton('Reset', ['class' => 'btn btn-default']) ?>
</div>
<?php ActiveForm::end(); ?>   

主视图:

<?php echo $this->render("../ads/_search", ['model' => $model]); ?>
<?php Pjax::begin(); ?>
<?= GridView::widget([
    'dataProvider'  => $dataProvider,
    'filterModel'   => $model,
    'showOnEmpty'   => false,
    'summary'       => '',
    'showFooter'    => false,
    'showHeader'    => false,
    'columns'       => [
        'name',
        'type',
        'explanation',
        'address',
        'province_name',
        'cost',
    ],
]);?>
<?php Pjax::end(); ?> 

还需要什么吗?

如果您想显示网格,让过滤器模型在全局搜索为空时返回一个没有结果的数据提供者

class FilterModel extends Model {
    public $globalSearch;
    ::
    ::
    public function search($params) {
        $provider = new ActiveDataProvider(
            $query = SomeModel::find();
        );
        if (!$this->globalSearch) {
            $query->where('1=0'); // returns no results
            return $provider;
        }
        // other code to return results with filter applied
        ::
        ::
        return $provider;
    }   
} 

我不知道你是如何应用这个globalSearch过滤器的,但这是网格过滤器的默认行为:当过滤器未定义时- GridView将显示匹配的数据项(===所有项)。

但是如果你想改变这种行为,你可以简单地不渲染GridView在空过滤器的情况下:

<?php echo $this->render("../ads/_search", ['model' => $model]); ?>
<?php 
if(!empty($model->globalSearch)){
    Pjax::begin(); 
    echo GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $model,
        'showOnEmpty'=>false,
        'summary'=>'',
        'showFooter'=>false,
        'showHeader' => false,
        'columns' => [
            'name',
            'type',
            'explanation',
            'address',
            'province_name',
            'cost',
        ],
    ]);
    Pjax::end(); 
}
?>