0 关注者

类 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
$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

受保护的方法

隐藏继承方法

方法 描述 定义于
getQueryParam() 返回指定查询参数的值。 yii\data\Pagination

常量

隐藏继承常量

常量 描述 定义于

属性详细信息

隐藏继承属性

$defaultPageSize 公共属性

默认页面大小。当无法通过$pageSizeParam$params 中确定页面大小时,此属性将由$pageSize 返回。

$forcePageParam 公共属性

是否始终在createUrl() 创建的 URL 中包含页面参数。如果为 false,并且$page 为 0,则页面参数不会放在 URL 中。

public boolean $forcePageParam true
$limit 公共属性

数据的限制。这可用于设置 SQL 语句用于获取当前页面数据的 LIMIT 值。请注意,如果页面大小无限大,则将返回 -1。

public integer $limit null
$offset 公共属性

数据的偏移量。这可以用于设置 SQL 语句的 OFFSET 值,以获取当前页的数据。

public integer $offset null
$page 公共属性

基于零的当前页码。

public integer $page null
$pageCount 公共属性

页面数。

public integer $pageCount null
$pageParam 公共属性

存储当前页码的的参数名称。

另请参见 $params.

public string $pageParam 'page'
$pageSize 公共属性

每页的项目数。如果小于 1,则表示页面大小是无限的,因此单个页面包含所有项目。

public integer $pageSize null
$pageSizeLimit 公共属性

页面大小限制。第一个数组元素定义最小页面大小,第二个定义最大页面大小。如果为 false,则表示 $pageSize 应始终返回 $defaultPageSize 的值。

public array|false $pageSizeLimit = [
    
1,
    
50,
]
$pageSizeParam 公共属性

存储页面大小的参数名称。

另请参见 $params.

public string $pageSizeParam 'per-page'
$params 公共属性

用于获取当前页码和创建新的分页 URL 的参数(名称 => 值)。如果未设置,则使用 $_GET 中的所有参数。

为了将哈希添加到所有链接,请使用 array_merge($_GET, ['#' => 'my-hash'])

$pageParam 为索引的数组元素被视为当前页码(默认为 0);而以 $pageSizeParam 为索引的元素被视为页面大小(默认为 $defaultPageSize)。

public array|null $params null
$route 公共属性

用于显示分页内容的控制器操作的路由。如果未设置,则表示使用当前请求的路由。

public string|null $route null
$totalCount 公共属性

项目的总数。

public integer $totalCount 0
$urlManager 公共属性

用于创建分页 URL 的 URL 管理器。如果未设置,则使用“urlManager”应用程序组件。

$validatePage 公共属性

是否检查 $page 是否在有效范围内。当此属性为真时,$page 的值将始终在 0 和 ($pageCount-1) 之间。因为 $pageCount 依赖于 $totalCount 的正确值,而该值在某些情况下可能不可用(例如 MongoDB),您可能希望将此属性设置为 false 以禁用页面号验证。通过这样做,$page 将返回在 $params 中由 $pageParam 索引的值。

public boolean $validatePage true

方法详情

隐藏继承方法

__call() public method

定义于: yii\base\BaseObject::__call()

调用不是类方法的命名方法。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当调用未知方法时会隐式调用。

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()");
}

            
__construct() public method

定义于: 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();
}

            
__get() public method

定义于: 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);
}

            
__isset() public method

定义于: yii\base\BaseObject::__isset()

检查属性是否已设置,即定义且不为空。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 isset($object->property) 时会隐式调用。

注意,如果属性未定义,将返回 false。

另见 https://php.ac.cn/manual/en/function.isset.php.

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;
}

            
__set() public method

定义于: 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);
    }
}

            
__unset() public method

定义于: yii\base\BaseObject::__unset()

将对象属性设置为 null。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 unset($object->property) 时会隐式调用。

注意,如果属性未定义,此方法将不会执行任何操作。如果属性是只读属性,它将抛出异常。

另见 https://php.ac.cn/manual/en/function.unset.php.

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);
    }
}

            
canGetProperty() public method

定义于: 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);
}

            
canSetProperty() public method

定义于: 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);
}

            
className() public static method
从 2.0.14 开始弃用。在 PHP >=5.5 上,使用 ::class 代替。

定义于: yii\base\BaseObject::className()

返回此类的完全限定名称。

public static string className ( )
return string

此类的完全限定名。

                public static function className()
{
    return get_called_class();
}

            
createUrl() public method

创建适合使用指定页码进行分页的 URL。

此方法主要由分页器在创建用于执行分页的 URL 时调用。

另见

public string createUrl ( $page, $pageSize null, $absolute false )
$page integer

URL 应该指向的页码,从零开始计数。

$pageSize integer|null

每页显示的条目数。如果未设置,则使用 $pageSize 的值。

$absolute boolean

是否创建绝对 URL。默认值为 false

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);
}

            
getLimit() public method

public integer getLimit ( )
return integer

数据的限制。这可用于设置 SQL 语句用于获取当前页面数据的 LIMIT 值。请注意,如果页面大小无限大,则将返回 -1。

                public function getLimit()
{
    $pageSize = $this->getPageSize();
    return $pageSize < 1 ? -1 : $pageSize;
}

            
getLinks() public method

返回用于导航到第一页、最后一页、下一页和上一页的整套链接。

public array getLinks ( $absolute false )
$absolute boolean

生成的 URL 是否应该为绝对 URL。

return array

用于导航目的的链接。数组键指定链接的目的(例如 LINK_FIRST),数组值为对应的 URL。

getOffset() public method

public integer getOffset ( )
return integer

数据的偏移量。这可以用于设置 SQL 语句的 OFFSET 值,以获取当前页的数据。

                public function getOffset()
{
    $pageSize = $this->getPageSize();
    return $pageSize < 1 ? 0 : $this->getPage() * $pageSize;
}

            
getPage() public method

返回基于零的当前页码。

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;
}

            
getPageCount() public method

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);
}

            
getPageSize() public method

返回每页项目的数量。

默认情况下,此方法将尝试通过 $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;
}

            
getQueryParam() protected method

返回指定查询参数的值。

此方法从 $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;
}

            
hasMethod() public method

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);
}

            
hasProperty() public method

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);
}

            
init() public method

Defined in: yii\base\BaseObject::init()

初始化对象。

此方法在构造函数结束时调用,在对象使用给定的配置初始化后调用。

public void init ( )

                public function init()
{
}

            
setPage() public method

设置当前页码。

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;
    }
}

            
setPageSize() public method

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;
    }
}