怎么在YII2框架中使用ActiveDataProvider和GridView

这篇文章给大家介绍怎么在YII2框架中使用ActiveDataProvider和GridView,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

具体如下:

YII2中ActiveDataProvider可以使用yii\db\Query或yii\db\ActiveQuery的对象,方便我们构造复杂的查询筛选语句。

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

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

怎么在YII2框架中使用ActiveDataProvider和GridView

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

<?php

namespaceapp\models;

useyii\db\ActiveRecord;
useyii\data\ActiveDataProvider;

classMyUserextendsActiveRecord
{

//返回要操作的表名
publicstaticfunctiontableName()
{
return'{{%user}}';
}

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

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

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

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

return$provider;
}
}

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

<?php

namespaceapp\controllers;

useYII;
useyii\web\Controller;
useapp\models\MyUser;

classTestControllerextendsController
{
publicfunctionactionTest()
{

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

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

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

<?php
useyii\helpers\Url;
useyii\helpers\Html;
useyii\grid\GridView;
?>

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

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

显示结果如下:

怎么在YII2框架中使用ActiveDataProvider和GridView

怎么在YII2框架中使用ActiveDataProvider和GridView

关于怎么在YII2框架中使用ActiveDataProvider和GridView就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

发布于 2021-03-21 22:38:45
收藏
分享
海报
0 条评论
165
上一篇:怎么在C#中利用AspriseOCR.dll识别验证码 下一篇:怎么在YII2框架中使用RBAC控制模块
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码