类 yii\data\Pagination
继承关系 | yii\data\Pagination » yii\base\BaseObject |
---|---|
实现接口 | yii\base\Configurable, yii\web\Linkable |
可用版本 | 2.0 |
源代码 | https://github.com/yiisoft/yii2/blob/master/framework/data/Pagination.php |
Pagination 表示与数据项分页相关的信息。
当数据需要在多个页面中呈现时,Pagination 可用于表示诸如总项目数、页面大小、当前页面 等信息。这些信息可以传递给分页器,以渲染分页按钮或链接。
以下示例展示如何创建一个分页对象并将其传递给分页器。
控制器动作
public function actionIndex()
{
$query = Article::find()->where(['status' => 1]);
$countQuery = clone $query;
$pages = new Pagination(['totalCount' => $countQuery->count()]);
$models = $query->offset($pages->offset)
->limit($pages->limit)
->all();
return $this->render('index', [
'models' => $models,
'pages' => $pages,
]);
}
视图
foreach ($models as $model) {
// display $model here
}
// display pagination
echo LinkPager::widget([
'pagination' => $pages,
]);
有关 Pagination 的更多详细信息和使用信息,请参阅分页指南文章。
公共属性
属性 | 类型 | 描述 | 定义于 |
---|---|---|---|
$defaultPageSize | integer | 默认页面大小。 | yii\data\Pagination |
$forcePageParam | boolean | 是否始终在createUrl() 创建的 URL 中包含页面参数。如果为 false,并且$page 为 0,则页面参数不会放在 URL 中。 | yii\data\Pagination |
$limit | integer | 数据的限制。这可用于设置 SQL 语句用于获取当前页面数据的 LIMIT 值。请注意,如果页面大小无限大,则将返回 -1。 | yii\data\Pagination |
$links | array | 用于导航目的的链接。 | yii\data\Pagination |
$offset | integer | 数据的偏移量。 | yii\data\Pagination |
$page | integer | 基于零的当前页码。 | yii\data\Pagination |
$pageCount | integer | 页面数。 | yii\data\Pagination |
$pageParam | string | 存储当前页码的的参数名称。 | yii\data\Pagination |
$pageSize | integer | 每页项目的数量。 | yii\data\Pagination |
$pageSizeLimit | array|false | 页面大小限制。 | yii\data\Pagination |
$pageSizeParam | string | 存储页面大小的参数名称。 | yii\data\Pagination |
$params | array|null | 用于获取当前页码和创建新分页 URL 的参数(名称 => 值)。 | yii\data\Pagination |
$route | string|null | 用于显示分页内容的控制器动作的路由。 | yii\data\Pagination |
$totalCount | integer | 项目的总数。 | yii\data\Pagination |
$urlManager | yii\web\UrlManager|null | 用于创建分页 URL 的 URL 管理器。 | yii\data\Pagination |
$validatePage | boolean | 是否检查$page 是否在有效范围内。 | yii\data\Pagination |
公共方法
方法 | 描述 | 定义于 |
---|---|---|
__call() | 调用不是类方法的命名方法。 | yii\base\BaseObject |
__construct() | 构造函数。 | yii\base\BaseObject |
__get() | 返回对象属性的值。 | yii\base\BaseObject |
__isset() | 检查属性是否已设置,即定义且不为空。 | yii\base\BaseObject |
__set() | 设置对象属性的值。 | yii\base\BaseObject |
__unset() | 将对象属性设置为 null。 | yii\base\BaseObject |
canGetProperty() | 返回一个值,指示属性是否可以读取。 | yii\base\BaseObject |
canSetProperty() | 返回一个值,指示属性是否可以设置。 | yii\base\BaseObject |
className() | 返回此类的完全限定名称。 | yii\base\BaseObject |
createUrl() | 创建适合使用指定页码进行分页的 URL。 | yii\data\Pagination |
getLimit() | yii\data\Pagination | |
getLinks() | 返回用于导航到第一页、最后一页、下一页和上一页的整套链接。 | yii\data\Pagination |
getOffset() | yii\data\Pagination | |
getPage() | 返回基于零的当前页码。 | yii\data\Pagination |
getPageCount() | yii\data\Pagination | |
getPageSize() | 返回每页项目的数量。 | yii\data\Pagination |
hasMethod() | 返回一个值,指示方法是否已定义。 | yii\base\BaseObject |
hasProperty() | 返回一个值,指示属性是否已定义。 | yii\base\BaseObject |
init() | 初始化对象。 | yii\base\BaseObject |
setPage() | 设置当前页码。 | yii\data\Pagination |
setPageSize() | yii\data\Pagination |
常量
常量 | 值 | 描述 | 定义于 |
---|---|---|---|
LINK_FIRST | 'first' | yii\data\Pagination | |
LINK_LAST | 'last' | yii\data\Pagination | |
LINK_NEXT | 'next' | yii\data\Pagination | |
LINK_PREV | 'prev' | yii\data\Pagination |
属性详细信息
默认页面大小。当无法通过$pageSizeParam 从$params 中确定页面大小时,此属性将由$pageSize 返回。
是否始终在createUrl() 创建的 URL 中包含页面参数。如果为 false,并且$page 为 0,则页面参数不会放在 URL 中。
数据的限制。这可用于设置 SQL 语句用于获取当前页面数据的 LIMIT 值。请注意,如果页面大小无限大,则将返回 -1。
页面大小限制。第一个数组元素定义最小页面大小,第二个定义最大页面大小。如果为 false,则表示 $pageSize 应始终返回 $defaultPageSize 的值。
用于获取当前页码和创建新的分页 URL 的参数(名称 => 值)。如果未设置,则使用 $_GET 中的所有参数。
为了将哈希添加到所有链接,请使用 array_merge($_GET, ['#' => 'my-hash'])
。
以 $pageParam 为索引的数组元素被视为当前页码(默认为 0);而以 $pageSizeParam 为索引的元素被视为页面大小(默认为 $defaultPageSize)。
用于创建分页 URL 的 URL 管理器。如果未设置,则使用“urlManager”应用程序组件。
是否检查 $page 是否在有效范围内。当此属性为真时,$page 的值将始终在 0 和 ($pageCount-1) 之间。因为 $pageCount 依赖于 $totalCount 的正确值,而该值在某些情况下可能不可用(例如 MongoDB),您可能希望将此属性设置为 false 以禁用页面号验证。通过这样做,$page 将返回在 $params 中由 $pageParam 索引的值。
方法详情
public mixed __call ( $name, $params ) | ||
$name | string |
方法名 |
$params | array |
方法参数 |
return | mixed |
方法返回值 |
---|---|---|
throws | yii\base\UnknownMethodException |
当调用未知方法时 |
public function __call($name, $params)
{
throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}
定义于: yii\base\BaseObject::__construct()
构造函数。
默认实现执行两件事
- 使用给定的配置
$config
初始化对象。 - 调用 init().
如果此方法在子类中被重写,建议
- 构造函数的最后一个参数是一个配置数组,就像这里的
$config
一样。 - 在构造函数的末尾调用父类实现。
public void __construct ( $config = [] ) | ||
$config | array |
将用于初始化对象属性的键值对 |
public function __construct($config = [])
{
if (!empty($config)) {
Yii::configure($this, $config);
}
$this->init();
}
定义于: yii\base\BaseObject::__get()
返回对象属性的值。
不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 $value = $object->property;
时会隐式调用。
另见 __set().
public mixed __get ( $name ) | ||
$name | string |
属性名 |
return | mixed |
属性值 |
---|---|---|
throws | yii\base\UnknownPropertyException |
如果属性未定义 |
throws | yii\base\InvalidCallException |
如果属性是只写属性 |
public function __get($name)
{
$getter = 'get' . $name;
if (method_exists($this, $getter)) {
return $this->$getter();
} elseif (method_exists($this, 'set' . $name)) {
throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
}
throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}
定义于: yii\base\BaseObject::__isset()
检查属性是否已设置,即定义且不为空。
不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 isset($object->property)
时会隐式调用。
注意,如果属性未定义,将返回 false。
public boolean __isset ( $name ) | ||
$name | string |
属性名或事件名 |
return | boolean |
命名的属性是否已设置(非空)。 |
---|
public function __isset($name)
{
$getter = 'get' . $name;
if (method_exists($this, $getter)) {
return $this->$getter() !== null;
}
return false;
}
定义于: yii\base\BaseObject::__set()
设置对象属性的值。
不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 $object->property = $value;
时会隐式调用。
另见 __get().
public void __set ( $name, $value ) | ||
$name | string |
属性名或事件名 |
$value | mixed |
属性值 |
throws | yii\base\UnknownPropertyException |
如果属性未定义 |
---|---|---|
throws | yii\base\InvalidCallException |
如果属性是只读属性 |
public function __set($name, $value)
{
$setter = 'set' . $name;
if (method_exists($this, $setter)) {
$this->$setter($value);
} elseif (method_exists($this, 'get' . $name)) {
throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
} else {
throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}
}
定义于: yii\base\BaseObject::__unset()
将对象属性设置为 null。
不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 unset($object->property)
时会隐式调用。
注意,如果属性未定义,此方法将不会执行任何操作。如果属性是只读属性,它将抛出异常。
public void __unset ( $name ) | ||
$name | string |
属性名 |
throws | yii\base\InvalidCallException |
如果属性是只读属性。 |
---|
public function __unset($name)
{
$setter = 'set' . $name;
if (method_exists($this, $setter)) {
$this->$setter(null);
} elseif (method_exists($this, 'get' . $name)) {
throw new InvalidCallException('Unsetting read-only property: ' . get_class($this) . '::' . $name);
}
}
定义于: yii\base\BaseObject::canGetProperty()
返回一个值,指示属性是否可以读取。
属性是可读的,如果
- 类具有与指定名称关联的 getter 方法(在这种情况下,属性名称不区分大小写);
- 类具有与指定名称匹配的成员变量(当
$checkVars
为真时);
另见 canSetProperty().
public boolean canGetProperty ( $name, $checkVars = true ) | ||
$name | string |
属性名 |
$checkVars | boolean |
是否将成员变量视为属性 |
return | boolean |
属性是否可读 |
---|
public function canGetProperty($name, $checkVars = true)
{
return method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name);
}
定义于: yii\base\BaseObject::canSetProperty()
返回一个值,指示属性是否可以设置。
属性是可写的,如果
- 类具有与指定名称关联的 setter 方法(在这种情况下,属性名称不区分大小写);
- 类具有与指定名称匹配的成员变量(当
$checkVars
为真时);
另见 canGetProperty().
public boolean canSetProperty ( $name, $checkVars = true ) | ||
$name | string |
属性名 |
$checkVars | boolean |
是否将成员变量视为属性 |
return | boolean |
属性是否可写 |
---|
public function canSetProperty($name, $checkVars = true)
{
return method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name);
}
::class
代替。
定义于: yii\base\BaseObject::className()
返回此类的完全限定名称。
public static string className ( ) | ||
return | string |
此类的完全限定名。 |
---|
public static function className()
{
return get_called_class();
}
public string createUrl ( $page, $pageSize = null, $absolute = false ) | ||
$page | integer |
URL 应该指向的页码,从零开始计数。 |
$pageSize | integer|null |
每页显示的条目数。如果未设置,则使用 $pageSize 的值。 |
$absolute | boolean |
是否创建绝对 URL。默认值为 |
return | string |
生成的 URL |
---|
public function createUrl($page, $pageSize = null, $absolute = false)
{
$page = (int) $page;
$pageSize = (int) $pageSize;
if (($params = $this->params) === null) {
$request = Yii::$app->getRequest();
$params = $request instanceof Request ? $request->getQueryParams() : [];
}
if ($page > 0 || $page == 0 && $this->forcePageParam) {
$params[$this->pageParam] = $page + 1;
} else {
unset($params[$this->pageParam]);
}
if ($pageSize <= 0) {
$pageSize = $this->getPageSize();
}
if ($pageSize != $this->defaultPageSize) {
$params[$this->pageSizeParam] = $pageSize;
} else {
unset($params[$this->pageSizeParam]);
}
$params[0] = $this->route === null ? Yii::$app->controller->getRoute() : $this->route;
$urlManager = $this->urlManager === null ? Yii::$app->getUrlManager() : $this->urlManager;
if ($absolute) {
return $urlManager->createAbsoluteUrl($params);
}
return $urlManager->createUrl($params);
}
public integer getLimit ( ) | ||
return | integer |
数据的限制。这可用于设置 SQL 语句用于获取当前页面数据的 LIMIT 值。请注意,如果页面大小无限大,则将返回 -1。 |
---|
public function getLimit()
{
$pageSize = $this->getPageSize();
return $pageSize < 1 ? -1 : $pageSize;
}
返回用于导航到第一页、最后一页、下一页和上一页的整套链接。
public array getLinks ( $absolute = false ) | ||
$absolute | boolean |
生成的 URL 是否应该为绝对 URL。 |
return | array |
用于导航目的的链接。数组键指定链接的目的(例如 LINK_FIRST),数组值为对应的 URL。 |
---|
public function getLinks($absolute = false)
{
$currentPage = $this->getPage();
$pageCount = $this->getPageCount();
$links = [Link::REL_SELF => $this->createUrl($currentPage, null, $absolute)];
if ($pageCount > 0) {
$links[self::LINK_FIRST] = $this->createUrl(0, null, $absolute);
$links[self::LINK_LAST] = $this->createUrl($pageCount - 1, null, $absolute);
if ($currentPage > 0) {
$links[self::LINK_PREV] = $this->createUrl($currentPage - 1, null, $absolute);
}
if ($currentPage < $pageCount - 1) {
$links[self::LINK_NEXT] = $this->createUrl($currentPage + 1, null, $absolute);
}
}
return $links;
}
public integer getOffset ( ) | ||
return | integer |
数据的偏移量。这可以用于设置 SQL 语句的 OFFSET 值,以获取当前页的数据。 |
---|
public function getOffset()
{
$pageSize = $this->getPageSize();
return $pageSize < 1 ? 0 : $this->getPage() * $pageSize;
}
返回基于零的当前页码。
public integer getPage ( $recalculate = false ) | ||
$recalculate | boolean |
是否根据页面大小和项目数量重新计算当前页面。 |
return | integer |
基于零的当前页码。 |
---|
public function getPage($recalculate = false)
{
if ($this->_page === null || $recalculate) {
$page = (int) $this->getQueryParam($this->pageParam, 1) - 1;
$this->setPage($page, true);
}
return $this->_page;
}
public integer getPageCount ( ) | ||
return | integer |
页面数量 |
---|
public function getPageCount()
{
$pageSize = $this->getPageSize();
if ($pageSize < 1) {
return $this->totalCount > 0 ? 1 : 0;
}
$totalCount = $this->totalCount < 0 ? 0 : (int) $this->totalCount;
return (int) (($totalCount + $pageSize - 1) / $pageSize);
}
返回每页项目的数量。
默认情况下,此方法将尝试通过 $pageSizeParam 在 $params 中确定页面大小。如果无法通过这种方式确定页面大小,则将返回 $defaultPageSize。
另请参见 $pageSizeLimit。
public integer getPageSize ( ) | ||
return | integer |
每页的项目数。如果小于 1,则表示页面大小是无限的,因此单个页面包含所有项目。 |
---|
public function getPageSize()
{
if ($this->_pageSize === null) {
if (empty($this->pageSizeLimit) || !isset($this->pageSizeLimit[0], $this->pageSizeLimit[1])) {
$pageSize = $this->defaultPageSize;
$this->setPageSize($pageSize);
} else {
$pageSize = (int) $this->getQueryParam($this->pageSizeParam, $this->defaultPageSize);
$this->setPageSize($pageSize, true);
}
}
return $this->_pageSize;
}
返回指定查询参数的值。
此方法从 $params 中返回命名的参数值。如果该值不存在,则返回 Null。
protected string|null getQueryParam ( $name, $defaultValue = null ) | ||
$name | string |
参数名称 |
$defaultValue | string|null |
当 $params 中不存在指定参数时要返回的值。 |
return | string|null |
参数值 |
---|
protected function getQueryParam($name, $defaultValue = null)
{
if (($params = $this->params) === null) {
$request = Yii::$app->getRequest();
$params = $request instanceof Request ? $request->getQueryParams() : [];
}
return isset($params[$name]) && is_scalar($params[$name]) ? $params[$name] : $defaultValue;
}
Defined in: yii\base\BaseObject::hasMethod()
返回一个值,指示方法是否已定义。
默认实现是调用 php 函数 method_exists()
。当您实现 php 魔术方法 __call()
时,您可以覆盖此方法。
public boolean hasMethod ( $name ) | ||
$name | string |
方法名 |
return | boolean |
方法是否已定义 |
---|
public function hasMethod($name)
{
return method_exists($this, $name);
}
Defined in: yii\base\BaseObject::hasProperty()
返回一个值,指示属性是否已定义。
如果定义了属性,则
- 该类具有与指定名称关联的 getter 或 setter 方法(在这种情况下,属性名称不区分大小写);
- 类具有与指定名称匹配的成员变量(当
$checkVars
为真时);
另见
public boolean hasProperty ( $name, $checkVars = true ) | ||
$name | string |
属性名 |
$checkVars | boolean |
是否将成员变量视为属性 |
return | boolean |
属性是否已定义 |
---|
public function hasProperty($name, $checkVars = true)
{
return $this->canGetProperty($name, $checkVars) || $this->canSetProperty($name, false);
}
public void init ( ) |
public function init()
{
}
设置当前页码。
public void setPage ( $value, $validatePage = false ) | ||
$value | integer |
当前页面的从零开始的索引。 |
$validatePage | boolean |
是否验证页码。请注意,为了验证页码,$validatePage 和此参数都必须为 true。 |
public function setPage($value, $validatePage = false)
{
if ($value === null) {
$this->_page = null;
} else {
$value = (int) $value;
if ($validatePage && $this->validatePage) {
$pageCount = $this->getPageCount();
if ($value >= $pageCount) {
$value = $pageCount - 1;
}
}
if ($value < 0) {
$value = 0;
}
$this->_page = $value;
}
}
public void setPageSize ( $value, $validatePageSize = false ) | ||
$value | integer |
每页项目的数量。 |
$validatePageSize | boolean |
是否验证页面大小。 |
public function setPageSize($value, $validatePageSize = false)
{
if ($value === null) {
$this->_pageSize = null;
} else {
$value = (int) $value;
if ($validatePageSize && isset($this->pageSizeLimit[0], $this->pageSizeLimit[1])) {
if ($value < $this->pageSizeLimit[0]) {
$value = $this->pageSizeLimit[0];
} elseif ($value > $this->pageSizeLimit[1]) {
$value = $this->pageSizeLimit[1];
}
}
$this->_pageSize = $value;
}
}
注册 或 登录 以发表评论。