在呈现到视图之前访问数据提供者时,Yii 2.0 Gridview Toggle 数据不起作用

Yii 2.0 Gridview Toggle Data does not work when dataprovider is accessed before rendered into view

我已将我的 Gridview 配置为将数据导出到 Excel。此外,我已将页面限制设置为 15,目前有 80 条记录。

现在,每当我切换 gridview 以显示所有要导出的记录时,分页就会消失,但只有 gridview 上显示的当前项目(15 项)才会显示,而应该是全部 80。

在尝试我的代码后,我发现每当我尝试在视图中呈现之前访问控制器中的数据提供程序时,就会发生这种情况。

即使控制器中的这个简单片段也会导致此问题:

var_dump($dataProvider->getModels());

如果我删除了数据提供者访问权限,切换就可以正常工作。

我该如何解决这个问题?我真的需要访问数据提供者中的数据,以根据数据切换列的可见性。在呈现到视图之前。

如果这意味着什么,我正在为 Yii 2 使用 Kartik Gridview。

更新:我的代码看起来像这样

控制器

$model = new MyModelSearch()
$dataProvider = $model->search(Yii::$app->request->queryParams);
$hasTypes = ([type1 => false, type2 => false, type3 => false]);

//this causes my error
foreach($dataProvider->getModels() as $data) {
       foreach($data->myModel as $m) {
            if($hasTypes[$m->type]) {
                continue;
                $hasTypes[$m->type] = true;
            }
       }
}
return $this->render('my-view',[
      'model' => $model,
      'dataProvider' => $dataProvider,
      'hasTypes' => $hasTypes
]);

查看

<?= GridView::widget([
        'dataProvider' => $dataProvider,
        'columns' => [
              'label' => 'Type 1',
              'attribute' => 'type',
              'value' => 'type_value',
              'visible' => $hasTypes[1] // check if type is present
        ],
        'toolbar' => ['{export}', '{toggleData}'],
        'export' => ['target' => GridView::TARGET_SELF],
        'panel' => ['type' => GridView::TYPE_PRIMARY],
])

我在github repository发现了类似的问题,所以我在那里询问,问题终于得到解决。快速的解决方案是克隆数据提供者并使用克隆访问模型,如下所示:

$dataProviderClone = clone $dataProvider;
foreach($dataProviderClone->getModels() as $data) {
     // do something
}

仍然不明白是什么导致了这个问题。