加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

YII2中ActiveDataProvider与GridView的配合使用

发布时间:2020-12-14 13:37:40 所属栏目:大数据 来源:网络整理
导读:YII2中ActiveDataProvider可以使用yiidbQuery或yiidbActiveQuery的对象,方便我们构造复杂的查询筛选语句。 配合强大的GridView,快速的显示我们想要的数据。 通过上面的两个工具,我们快速的显示用户表信息。用户表结构如下: 我们创建一个用户模型MyUs

YII2中ActiveDataProvider可以使用yiidbQuery或yiidbActiveQuery的对象,方便我们构造复杂的查询筛选语句。

配合强大的GridView,快速的显示我们想要的数据。

通过上面的两个工具,我们快速的显示用户表信息。用户表结构如下:

我们创建一个用户模型MyUser.php,代码如下:

<?php

namespace appmodels;

use yiidbActiveRecord;
use yiidataActiveDataProvider;

class MyUser extends ActiveRecord
{

    //返回要操作的表名
    public static function tableName()
    {
        return '{{%user}}';
    }

    //设置规则
    //注意,如果没有给字段设置规则,GridView的筛选项是不会出现的
    public function rules()
    {
        return [
            [['id','name','sex','age'],'trim'],[['id','integer'],['name','string'],];
    }

    //查询
    public function search($params)
    {
        //首先我们先获取一个ActiveQuery
        $query = self::find();
        //然后创建一个ActiveDataProvider对象
        $provider = new ActiveDataProvider([
            //为ActiveDataProvider对象提供一个查询对象
            'query' => $query,//设置分页参数
            'pagination' => [
                //分页大小
                'pageSize' => 3,//设置地址栏当前页数参数名
                'pageParam' => 'p',//设置地址栏分页大小参数名
                'pageSizeParam' => 'pageSize',],//设置排序
            'sort' => [
                //默认排序方式
                'defaultOrder' => [
                    'id' => SORT_DESC,//参与排序的字段
                'attributes' => [
                    'id','age'
                ],]);

        //如果验证没通过,直接返回
        if (!($this->load($params) && $this->validate())) {
            return $provider;
        }

        //增加过滤条件
        $query->andFilterWhere(['id' => $this->id])
            ->andFilterWhere(['like',$this->name])
            ->andFilterWhere(['sex' => $this->sex])
            ->andFilterWhere(['age' => $this->age]);

        return $provider;
    }
}

然后,创建控制器TestController.php,代码如下:

<?php

namespace appcontrollers;

use YII;
use yiiwebController;
use appmodelsMyUser;

class TestController extends Controller
{
    public function actionTest()
    {

        $user = new MyUser();
        //调用模型search方法,把get参数传进去
        $provider = $user->search(YII::$app->request->get());

        return $this->render('test',[
            'model' => $user,'provider' => $provider,]);
    }
}

视图页面test.php,代码如下:

<?php
use yiihelpersUrl;
use yiihelpersHtml;
use yiigridGridView;
?>

<div id="page-wrapper">
    <div class="row">
        <div class="col-lg-12">
            <button class="btn btn-primary" id="showSelBtn">显示我选中的</button>
        </div>
    </div>
    <div class="row">
        <div class="col-lg-12">
            <?php echo GridView::widget([
                //设置GridView的ID
                'id' => 'myUserGridView',//设置数据提供器
                'dataProvider' => $provider,//设置筛选模型
                'filterModel' => $model,'columns' => [
                    //复选框列
                    ['class' => 'yiigridCheckboxColumn'],//显示序号列
                    ['class' => 'yiigridSerialColumn'],[
                        //设置字段显示标题
                        'label' => 'ID',//字段名
                        'attribute' => 'id',//格式化
                        'format' => 'raw',//设置单元格样式
                        'headerOptions' => [
                            'style' => 'width:120px;',[
                        'label' => '姓名','attribute' => 'name','format' => 'raw',[
                        'label' => '头像','attribute' => 'head_img',//通过该返回值,我们可以任意控制列数据的显示
                        //$data指向的是当前行的数据结果集
                        'value' => function ($data) {
                            return '<img src="' . '/' . ltrim($data->head_img,'/') . '" width="60px">';
                        },[
                        'label' => '性别',//设置筛选选项
                        'filter' => [0 => '男',1 => '女'],'attribute' => 'sex','value' => function ($data) {
                            return ($data->sex == 0) ? '男' : '女';
                        }
                    ],[
                        'label' => '年龄','attribute' => 'age',[
                        'header' => '操作','class' => 'yiigridActionColumn',//设置显示模板
                        'template' => '{upd} {del}',//下面的按钮设置,与上面的模板设置相关联
                        'buttons' => [
                            'upd' => function ($url,$model,$key) {
                                return '<a href="' . Url::toRoute(['test/upd','id' => $key]) . '" class="btn btn-warning">修改</a>';
                            },'del' => function ($url,$key) {
                                return '<a href="' . Url::toRoute(['test/del','id' => $key]) . '" class="btn btn-danger">删除</a>';
                            },]); ?>
        </div>
    </div>
</div>

<?php echo Html::jsFile('@web/js/jquery-3.3.1.min.js'); ?>
<script type="text/javascript">
    $("#showSelBtn").on("click",function () {
        var keys = $("#myUserGridView").yiiGridView('getSelectedRows');
        alert(keys);
    });
</script>

显示结果如下:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读