网站首页技术博客
GII生成代码进行分页
摘要刚刚体会了GII生成代码的神奇和强大就又面临了一个严峻的问题就是分页问题
在默认情况下是没有设置分页的,这样就会应用yii\data\Pagination 类下的$defaultPageSize进行分页,默认20
直接去修改这个值肯定是不合适的,但继续向下发现了setPagination()方法
需要参数$value
刚刚体会了GII生成代码的神奇和强大就又面临了一个严峻的问题就是分页问题
以下是GII生成的一个控制器方法的代码
public function actionIndex() { $searchModel = new CountrySearch(); $dataProvider = $searchModel->search(Yii::$app->request->queryParams); return $this->render('index', [ 'searchModel' => $searchModel, 'dataProvider' => $dataProvider, ]); }
生成的视图部分
= Html::encode($this->title) ?>
render('_search', ['model' => $searchModel]); ?>= Html::a('新建国家', ['create'], ['class' => 'btn btn-success']) ?>
= GridView::widget([ 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [ ['class' => 'yii\grid\SerialColumn'], 'code', 'name', 'population', ], ]); ?>
可以看到,在默认情况下是没有设置分页的,这样就会应用yii\data\Pagination 类下的$defaultPageSize进行分页,默认20
直接去修改这个值肯定是不合适的(其他地方可能需要用到不同条数的分页,还是需要设置)
而之前学到的分页代码和文档中的分页代码都是这样的
use yii\data\Pagination; // build a DB query to get all articles with status = 1 $query = Article::find()->where(['status' => 1]); // get the total number of articles (but do not fetch the article data yet) $count = $query->count(); // create a pagination object with the total count $pagination = new Pagination(['totalCount' => $count]); // limit the query using the pagination and retrieve the articles $articles = $query->offset($pagination->offset) ->limit($pagination->limit) ->all();
将分页和数据一同分配到视图,明显和GII生成的代码不一样啊,这样就没办法进行pagination的分配
经过摸索将$dataProvider打印出来的时候发现一个_pagination 属性
["_pagination":"yii\data\BaseDataProvider":private]=> NULL
打开yii\data\BaseDataProvider 发现确实有"_pagination"属性,但是是private类型的不能修改,但继续向下发现了setPagination()方法
需要参数$value
public function setPagination($value) { if (is_array($value)) { $config = ['class' => Pagination::className()]; if ($this->id !== null) { $config['pageParam'] = $this->id . '-page'; $config['pageSizeParam'] = $this->id . '-per-page'; } $this->_pagination = Yii::createObject(array_merge($config, $value)); } elseif ($value instanceof Pagination || $value === false) { $this->_pagination = $value; } else { throw new InvalidParamException('Only Pagination instance, configuration array or false is allowed.'); } }
$value 类型需要为数组、对象实例、或者是false
查了文档也没有给出数组的结构或者属性,而false显然是不能达成自定义赋值的
只能通过传入一个Pagination实例来实现
So 就有了下边的代码
$pagination = new Pagination(); $pagination->defaultPageSize=5; $dataProvider->setPagination($pagination);
三行代码插入上面的actionIndex方法,大功告成
相关文章
- Access denied; you need (at least one of) the SUPER privilege(s) for this operatio
- rm: cannot remove `file': Operation not permitted解决方法 chattr命令详解
- easywechat报错:Failed to cache access token
- chrome模拟微信浏览器的user agent
- jQuery打印插件jqprint
- 实现页面图片的延时异步加载
- 微信小程序登录流程
- mysql General error: 1267 Illegal mix of collations错误
- 基于general_log的mysql日志追踪
- linux nvm 安装及使用
- MySQL 高频面试题,都在这了
- 配置安装xdebug
- Msyql的并发控制-锁策略
- web开发经验——富头像上传编辑器的使用——fullavatareditor
- 通过微信扫描小程序码登录PC端
- 判断数组是否为空的5大方法
- linux安装之后,环境变量不生效
- Windows删除无效服务
- composer的介绍,安装和使用
- 面试官:Msyql事务的ACID特性