【问题标题】:Yii 2.0 Gridview Toggle Data does not work when dataprovider is accessed before rendered into viewYii 2.0 Gridview 切换数据在渲染到视图之前访问数据提供程序时不起作用
【发布时间】:2015-07-15 16:33:50
【问题描述】:

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

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

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

即使是控制器中的这个简单的 sn-p 也会导致这个问题:

var_dump($dataProvider->getModels());

如果我删除 dataprovider 访问权限,则切换可以正常工作。

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

如果这意味着什么,我正在为 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],
])

【问题讨论】:

  • 显示您的控制器并查看此操作的代码..

标签: gridview yii2


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多