You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:58:00