当前位置:首页 > CMS教程 > 其它CMS > 列表

YII2框架中ActiveDataProvider与GridView的配合使用操作示例

发布:smiling 来源: PHP粉丝网  添加日期:2022-02-21 09:38:56 浏览: 评论:0 

本文实例讲述了YII2框架中ActiveDataProvider与GridView的配合使用操作,分享给大家供大家参考,具体如下:

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

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

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

YII2框架中ActiveDataProvider与GridView的配合使用操作示例

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

  1. <?php 
  2.  
  3. namespace app\models; 
  4.  
  5. use yii\db\ActiveRecord; 
  6. use yii\data\ActiveDataProvider; 
  7.  
  8. class MyUser extends ActiveRecord 
  9.  
  10.   //返回要操作的表名 
  11.   public static function tableName() 
  12.   { 
  13.     return '{{%user}}'
  14.   } 
  15.  
  16.   //设置规则 
  17.   //注意,如果没有给字段设置规则,GridView的筛选项是不会出现的 
  18.   public function rules() 
  19.   { 
  20.     return [ 
  21.       [['id''name''sex''age'], 'trim'], 
  22.       [['id''sex''age'], 'integer'], 
  23.       ['name''string'], 
  24.     ]; 
  25.   } 
  26.  
  27.   //查询 
  28.   public function search($params
  29.   { 
  30.     //首先我们先获取一个ActiveQuery 
  31.     $query = self::find(); 
  32.     //然后创建一个ActiveDataProvider对象 
  33.     $provider = new ActiveDataProvider([ 
  34.       //为ActiveDataProvider对象提供一个查询对象 
  35.       'query' => $query
  36.       //设置分页参数 
  37.       'pagination' => [ 
  38.         //分页大小 
  39.         'pageSize' => 3, 
  40.         //设置地址栏当前页数参数名 
  41.         'pageParam' => 'p'
  42.         //设置地址栏分页大小参数名 
  43.         'pageSizeParam' => 'pageSize'
  44.       ], 
  45.       //设置排序 
  46.       'sort' => [ 
  47.         //默认排序方式 
  48.         'defaultOrder' => [ 
  49.           'id' => SORT_DESC, 
  50.         ], 
  51.         //参与排序的字段 
  52.         'attributes' => [ 
  53.           'id''name''sex''age' 
  54.         ], 
  55.       ], 
  56.     ]); 
  57.  
  58.     //如果验证没通过,直接返回 
  59.     if (!($this->load($params) && $this->validate())) { 
  60.       return $provider
  61.     } 
  62.  
  63.     //增加过滤条件 
  64.     $query->andFilterWhere(['id' => $this->id]) 
  65.       ->andFilterWhere(['like''name'$this->name]) 
  66.       ->andFilterWhere(['sex' => $this->sex]) 
  67.       ->andFilterWhere(['age' => $this->age]); 
  68.  
  69.     return $provider
  70.   } 

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

  1. <?php 
  2.  
  3. namespace app\controllers; 
  4.  
  5. use YII; 
  6. use yii\web\Controller; 
  7. use app\models\MyUser; 
  8.  
  9. class TestController extends Controller 
  10.   public function actionTest() 
  11.   { 
  12.  
  13.     $user = new MyUser(); 
  14.     //调用模型search方法,把get参数传进去 
  15.     $provider = $user->search(YII::$app->request->get()); 
  16.  
  17.     return $this->render('test', [ 
  18.       'model' => $user
  19.       'provider' => $provider
  20.     ]); 
  21.   } 

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

  1. <?php 
  2. use yii\helpers\Url; 
  3. use yii\helpers\Html; 
  4. use yii\grid\GridView; 
  5. ?> 
  6.  
  7. <div id="page-wrapper"
  8.   <div class="row"
  9.     <div class="col-lg-12"
  10.       <button class="btn btn-primary" id="showSelBtn">显示我选中的</button> 
  11.     </div> 
  12.   </div> 
  13.   <div class="row"
  14.     <div class="col-lg-12"
  15.       <?php echo GridView::widget([ 
  16.         //设置GridView的ID 
  17.         'id' => 'myUserGridView'
  18.         //设置数据提供器 
  19.         'dataProvider' => $provider
  20.         //设置筛选模型 
  21.         'filterModel' => $model
  22.         'columns' => [ 
  23.           //复选框列 
  24.           ['class' => 'yii\grid\CheckboxColumn'], 
  25.           //显示序号列 
  26.           ['class' => 'yii\grid\SerialColumn'], 
  27.           [ 
  28.             //设置字段显示标题 
  29.             'label' => 'ID'
  30.             //字段名 
  31.             'attribute' => 'id'
  32.             //格式化 
  33.             'format' => 'raw'
  34.             //设置单元格样式 
  35.             'headerOptions' => [ 
  36.               'style' => 'width:120px;'
  37.             ], 
  38.           ], 
  39.           [ 
  40.             'label' => '姓名'
  41.             'attribute' => 'name'
  42.             'format' => 'raw'
  43.           ], 
  44.           [ 
  45.             'label' => '头像'
  46.             'attribute' => 'head_img'
  47.             'format' => 'raw'
  48.             //通过该返回值,我们可以任意控制列数据的显示 
  49.             //$data指向的是当前行的数据结果集 
  50.             'value' => function ($data) { 
  51.               return '<img src="' . '/' . ltrim($data->head_img, '/') . '" width="60px">'
  52.             }, 
  53.           ], 
  54.           [ 
  55.             'label' => '性别'
  56.             //设置筛选选项 
  57.             'filter' => [0 => '男', 1 => '女'], 
  58.             'attribute' => 'sex'
  59.             'format' => 'raw'
  60.             'value' => function ($data) { 
  61.               return ($data->sex == 0) ? '男' : '女'
  62.             } 
  63.           ], 
  64.           [ 
  65.             'label' => '年龄'
  66.             'attribute' => 'age'
  67.             'format' => 'raw'
  68.           ], 
  69.           [ 
  70.             'header' => '操作'
  71.             'class' => 'yii\grid\ActionColumn'
  72.             //设置显示模板 
  73.             'template' => '{upd} {del}'
  74.             //下面的按钮设置,与上面的模板设置相关联 
  75.             'buttons' => [ 
  76.               'upd' => function ($url$model$key) { 
  77.                 return '<a href="' . Url::toRoute(['test/upd''id' => $key]) . '" rel="external nofollow" class="btn btn-warning">修改</a>'
  78.               }, 
  79.               'del' => function ($url$model$key) { 
  80.                 return '<a href="' . Url::toRoute(['test/del''id' => $key]) . '" rel="external nofollow" class="btn btn-danger">删除</a>'
  81.               }, 
  82.             ], 
  83.           ], 
  84.         ], 
  85.       ]); ?> 
  86.     </div> 
  87.   </div> 
  88. </div> 
  89.  
  90. <?php echo Html::jsFile('@web/js/jquery-3.3.1.min.js'); ?> 
  91. <script type="text/javascript"
  92.   $("#showSelBtn").on("click"function () { 
  93.     var keys = $("#myUserGridView").yiiGridView('getSelectedRows'); 
  94.     alert(keys); 
  95.   }); 
  96. </script> 
  97. <?php 
  98. use yii\helpers\Url; 
  99. use yii\helpers\Html; 
  100. use yii\grid\GridView; 
  101. ?> 
  102.  
  103. <div id="page-wrapper"
  104.   <div class="row"
  105.     <div class="col-lg-12"
  106.       <button class="btn btn-primary" id="showSelBtn">显示我选中的</button> 
  107.     </div> 
  108.   </div> 
  109.   <div class="row"
  110.     <div class="col-lg-12"
  111.       <?php echo GridView::widget([ 
  112.         //设置GridView的ID 
  113.         'id' => 'myUserGridView'
  114.         //设置数据提供器 
  115.         'dataProvider' => $provider
  116.         //设置筛选模型 
  117.         'filterModel' => $model
  118.         'columns' => [ 
  119.           //复选框列 
  120.           ['class' => 'yii\grid\CheckboxColumn'], 
  121.           //显示序号列 
  122.           ['class' => 'yii\grid\SerialColumn'], 
  123.           [ 
  124.             //设置字段显示标题 
  125.             'label' => 'ID'
  126.             //字段名 
  127.             'attribute' => 'id'
  128.             //格式化 
  129.             'format' => 'raw'
  130.             //设置单元格样式 
  131.             'headerOptions' => [ 
  132.               'style' => 'width:120px;'
  133.             ], 
  134.           ], 
  135.           [ 
  136.             'label' => '姓名'
  137.             'attribute' => 'name'
  138.             'format' => 'raw'
  139.           ], 
  140.           [ 
  141.             'label' => '头像'
  142.             'attribute' => 'head_img'
  143.             'format' => 'raw'
  144.             //通过该返回值,我们可以任意控制列数据的显示 
  145.             //$data指向的是当前行的数据结果集 
  146.             'value' => function ($data) { 
  147.               return '<img src="' . '/' . ltrim($data->head_img, '/') . '" width="60px">'
  148.             }, 
  149.           ], 
  150.           [ 
  151.             'label' => '性别'
  152.             //设置筛选选项 
  153.             'filter' => [0 => '男', 1 => '女'], 
  154.             'attribute' => 'sex'
  155.             'format' => 'raw'
  156.             'value' => function ($data) { 
  157.               return ($data->sex == 0) ? '男' : '女'
  158.             } 
  159.           ], 
  160.           [ 
  161.             'label' => '年龄'
  162.             'attribute' => 'age'
  163.             'format' => 'raw'
  164.           ], 
  165.           [ 
  166.             'header' => '操作'
  167.             'class' => 'yii\grid\ActionColumn'
  168.             //设置显示模板 
  169.             'template' => '{upd} {del}'
  170.             //下面的按钮设置,与上面的模板设置相关联 
  171.             'buttons' => [ 
  172.               'upd' => function ($url$model$key) { 
  173.                 return '<a href="' . Url::toRoute(['test/upd''id' => $key]) . '" rel="external nofollow" class="btn btn-warning">修改</a>'
  174.               }, 
  175.               'del' => function ($url$model$key) { 
  176.                 return '<a href="' . Url::toRoute(['test/del''id' => $key]) . '" rel="external nofollow" class="btn btn-danger">删除</a>'
  177.               }, 
  178.             ], 
  179.           ], 
  180.         ], 
  181.       ]); ?> 
  182.     </div> 
  183.   </div> 
  184. </div> 
  185.  
  186. <?php echo Html::jsFile('@web/js/jquery-3.3.1.min.js'); ?> 
  187. <script type="text/javascript"
  188.   $("#showSelBtn").on("click"function () { 
  189.     var keys = $("#myUserGridView").yiiGridView('getSelectedRows'); 
  190.     alert(keys); 
  191.   }); 
  192. </script> 

显示结果如下:

YII2框架中ActiveDataProvider与GridView的配合使用操作示例

Tags: ActiveDataProvider GridView

分享到: