YII2框架中ActiveDataProvider与GridView的配合使用操作示例
发布:smiling 来源: PHP粉丝网 添加日期:2022-02-21 09:38:56 浏览: 评论:0
本文实例讲述了YII2框架中ActiveDataProvider与GridView的配合使用操作,分享给大家供大家参考,具体如下:
YII2中ActiveDataProvider可以使用yii\db\Query或yii\db\ActiveQuery的对象,方便我们构造复杂的查询筛选语句。
配合强大的GridView,快速的显示我们想要的数据。
通过上面的两个工具,我们快速的显示用户表信息,用户表结构如下:

我们创建一个用户模型MyUser.php,代码如下:
- <?php
 - namespace app\models;
 - use yii\db\ActiveRecord;
 - use yii\data\ActiveDataProvider;
 - class MyUser extends ActiveRecord
 - {
 - //返回要操作的表名
 - public static function tableName()
 - {
 - return '{{%user}}';
 - }
 - //设置规则
 - //注意,如果没有给字段设置规则,GridView的筛选项是不会出现的
 - public function rules()
 - {
 - return [
 - [['id', 'name', 'sex', 'age'], 'trim'],
 - [['id', 'sex', 'age'], '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', '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
 - namespace app\controllers;
 - use YII;
 - use yii\web\Controller;
 - use app\models\MyUser;
 - 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 yii\helpers\Url;
 - use yii\helpers\Html;
 - use yii\grid\GridView;
 - ?>
 - <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' => '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 '<img src="' . '/' . 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 '<a href="' . Url::toRoute(['test/upd', 'id' => $key]) . '" rel="external nofollow" class="btn btn-warning">修改</a>';
 - },
 - 'del' => function ($url, $model, $key) {
 - return '<a href="' . Url::toRoute(['test/del', 'id' => $key]) . '" rel="external nofollow" 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>
 - <?php
 - use yii\helpers\Url;
 - use yii\helpers\Html;
 - use yii\grid\GridView;
 - ?>
 - <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' => '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 '<img src="' . '/' . 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 '<a href="' . Url::toRoute(['test/upd', 'id' => $key]) . '" rel="external nofollow" class="btn btn-warning">修改</a>';
 - },
 - 'del' => function ($url, $model, $key) {
 - return '<a href="' . Url::toRoute(['test/del', 'id' => $key]) . '" rel="external nofollow" 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>
 
显示结果如下:

Tags: ActiveDataProvider GridView
- 上一篇:YII2框架使用控制台命令的方法分析
 - 下一篇:最后一页
 
相关文章
- ·Yii中CArrayDataProvider和CActiveDataProvider区别实例分析(2021-07-12)
 - ·Yii把CGridView文本框换成下拉框的方法(2021-05-02)
 - ·yii2.0之GridView自定义按钮和链接用法(2021-05-03)
 - ·Yii中CGridView实现批量删除的方法(2021-07-02)
 - ·浅析Yii2中GridView常见操作(2021-07-29)
 - ·浅析Yii2 gridview实现批量删除教程(2021-07-29)
 
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
 - PHP新手上路(一)(7)
 - 惹恼程序员的十件事(5)
 - PHP邮件发送例子,已测试成功(5)
 - 致初学者:PHP比ASP优秀的七个理由(4)
 - PHP会被淘汰吗?(4)
 - PHP新手上路(四)(4)
 - 如何去学习PHP?(2)
 - 简单入门级php分页代码(2)
 - php中邮箱email 电话等格式的验证(2)
 
