Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Yii2 ArrayDataProvider不显示已分页的数据_Php_Arrays_Yii2 - Fatal编程技术网

Php Yii2 ArrayDataProvider不显示已分页的数据

Php Yii2 ArrayDataProvider不显示已分页的数据,php,arrays,yii2,Php,Arrays,Yii2,我对Yii2提供的ArrayDataProvider对象有问题。我有一个巨大的API调用,返回超过7k项(这是一个问题,因为获取所有项需要很长时间)。我意识到我可以告诉API为我分页,所以我试图将已经分页的数据实现到ArrayDataProvider中,但只在第1页起作用,当我请求第2页时,我看到API返回了接下来的50项,但在我看来GridView对象没有显示任何内容 例如: $dataProvider = new ArrayDataProvider([ 'key' =>

我对Yii2提供的ArrayDataProvider对象有问题。我有一个巨大的API调用,返回超过7k项(这是一个问题,因为获取所有项需要很长时间)。我意识到我可以告诉API为我分页,所以我试图将已经分页的数据实现到ArrayDataProvider中,但只在第1页起作用,当我请求第2页时,我看到API返回了接下来的50项,但在我看来GridView对象没有显示任何内容

例如:

$dataProvider = new ArrayDataProvider([
        'key' => 'id',
        'allModels' => $items,
        'totalCount' => self::GetNumOfItems(),
        'sort' => [
            'attributes' => ['id', 'name', 'email'],
        ],
        'pagination' => [
            'pageSize' => 50,
        ],
    ]);

我要求正确显示分页器的项目总数。如果我要求第1页,一切正常,但如果更改到第2页或其他任何页面,gridview没有显示任何项目。我怀疑这和已经分页的数据有关,但是,有什么方法可以让它工作吗

ArrayDataProvider
$allModels
中的所有元素进行分页。所以,如果您每页有50个项目,第二页将显示51-100型。如果您已经有分页数据,并且
$items
仅包含第二页中的50个元素,
ArrayDataProvider
仍将搜索不存在的51-100型号,因此您将得到空页

在您的情况下,您可能不应该使用
ArrayDataProvider
,而应该编写自己的数据提供程序,它将像API的代理一样工作
ArrayDataProvider
仍然需要所有模型来执行排序或筛选,因此您可以从API获取所有7k项并允许在
ArrayDataProvider
级别处理筛选和排序,或者应该在API级别进行筛选和排序,并且framework core中的现有数据提供程序都不能满足您的需要。
您可以使用类似于
ProxyDataProvider
的工具搜索扩展,但可能很难找到与您的API匹配的工具。

添加
$items
totalCount
函数。