如何在Yii2的普通表格(非GridView)中添加简单搜索功能
在Yii2普通表格中实现简单搜索功能
没问题,我来帮你搞定这个需求,咱们分控制器逻辑改造和视图添加搜索表单两部分来实现:
1. 对应的控制器代码
假设你的控制器是ArsipSdmController,修改actionIndex方法,加入搜索参数的处理逻辑,动态过滤数据:
<?php namespace app\controllers; use Yii; use app\models\ArsipSdm; // 替换成你的实际模型类 use yii\web\Controller; class ArsipSdmController extends Controller { public function actionIndex() { // 初始化查询对象,指定需要的字段 $query = ArsipSdm::find() ->select(['nip', 'nama', 'jumlah']) ->orderBy(['nama' => SORT_ASC]); // 可选:添加默认排序 // 获取URL中的搜索参数 $searchNip = Yii::$app->request->get('search_nip'); $searchNama = Yii::$app->request->get('search_nama'); // 根据关键词过滤数据,空参数会自动忽略 if (!empty($searchNip)) { $query->andFilterWhere(['like', 'nip', $searchNip]); } if (!empty($searchNama)) { $query->andFilterWhere(['like', 'nama', $searchNama]); } // 获取过滤后的所有数据(如果需要分页,可以改用Pagination组件) $models = $query->all(); return $this->render('index', [ 'models' => $models, ]); } // 你的其他action方法... }
2. 给视图添加搜索表单
在你现有的表格代码上方插入搜索表单,让用户可以输入关键词提交搜索:
<!-- 搜索表单 --> <form method="get" action="<?= yii\helpers\Url::to(['arsip-sdm/index']) ?>" class="mb-3"> <div class="row"> <div class="col-md-4"> <input type="text" name="search_nip" class="form-control" placeholder="搜索NIP" value="<?= Yii::$app->request->get('search_nip') ?>"> </div> <div class="col-md-4"> <input type="text" name="search_nama" class="form-control" placeholder="搜索姓名" value="<?= Yii::$app->request->get('search_nama') ?>"> </div> <div class="col-md-4"> <button type="submit" class="btn btn-primary">搜索</button> <a href="<?= yii\helpers\Url::to(['arsip-sdm/index']) ?>" class="btn btn-secondary ml-2">重置</a> </div> </div> </form> <!-- 你原来的表格代码 --> <table class="table table-striped table-bordered"> <tr> <th class="text-center">NIP</th> <th class="text-center">Nama Pegawai</th> <th class="text-center">Jumlah Dokumen</th> <th></th> </tr> <?php foreach($models as $data): ?> <tr> <td><?= $data["nip"] ?></td> <td><?= $data["nama"] ?></td> <td align="center"><?= $data["jumlah"] ?></td> <td width="200px" align="center"> <a class="btn btn-success" href="./?r=arsip-sdm/detail&id=<?= $data['nip'] ?>">Detail</a> </td> </tr> <?php endforeach; ?> </table>
关键细节说明:
- 用
andFilterWhere而不是where:空的搜索参数会自动被忽略,不会影响原始数据的展示 - 表单用
GET方法提交:搜索关键词会显示在URL中,方便用户分享或保存搜索结果链接 - 重置按钮直接跳转回无参数的列表页,一键恢复所有数据展示
内容的提问来源于stack exchange,提问作者V.Ananda
相关产品推荐
相关产品推荐

