温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-03-20 15:23:37 来源:亿速云 阅读:312 作者:Leah 栏目:开发技术

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

具体如下:

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

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

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

怎么在YII2框架中使用ActiveDataProvider和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>

显示结果如下:

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

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

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI