【问题标题】:Print gridview search in PDF using kartik-mPDF extension使用 kartik-mPDF 扩展在 PDF 中打印 gridview 搜索
【发布时间】:2019-06-28 18:40:27
【问题描述】:

我正在使用 kartik-mpdf 库生成我的网格视图的 pdf,问题是我想将 $dataProvider 和 $searchModel 从 index.php 传递到将作为 pdf 文档 (pdf.php) 呈现器的视图,因此,当我搜索索引并单击“通用 pdf”按钮时,它会调用 AlumnoController 上的操作 GenerarPdf 并将索引操作的相同 $searchModel 和 $dataProvider 加载到 pdf.php gridview 并生成 pdf 文件。

这是代码。 AlumnoController.php - actionGenerarPdf

public function actionGenerarPdf($searchModel, $dataProvider) 
    {
        Yii::$app->response->format = \yii\web\Response::FORMAT_RAW;
        $formatter = \Yii::$app->formatter;
        $pdf = new Pdf([
            'mode' => Pdf::MODE_CORE, // leaner size using standard fonts
            'destination' => Pdf::DEST_BROWSER,
            //Se renderiza la vista "pdf" (que abrirá la nueva ventana)
            'content' => $this->renderPartial('pdf', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider
                ]),
            'options' => [
            // any mpdf options you wish to set
            ],
            'methods' => [
                'SetTitle' => 'SIE: Sistema de Informacion Estudiantil',
                'SetSubject' => 'Generating PDF files via yii2-mpdf extension has never been easy',
                'SetHeader' => ['SIE: Sistema de Información Estudiantil||Generado el: ' . $formatter->asDate(date("r"))],
                'SetFooter' => ['|Página {PAGENO}|'],
                'SetAuthor' => 'SIE: Sistema de información Estudiantil',
                'SetCreator' => 'Juan Carlos Reyes Suazo',
//              'SetKeywords' => 'Sie, Yii2, Export, PDF, MPDF, Output, yii2-mpdf',
            ]
        ]);
        return $pdf->render();
    }

index.php

<p>
        <?php 
            if (User::isSuperAdmin(Yii::$app->user->identity->id)){
                echo Html::a('Crear Alumno', ['create'], ['class' => 'btn btn-success']); 
                echo Html::a('Ver PDF', [
                    '/alumno/generar-pdf', 
                    'searchModel' => $searchModel, 
                    'dataProvider' => $dataProvider
                        ], 
                        [
                    'class' => 'btn btn-success', 
                    'target'=>'_blank', 
                    'data-toggle'=>'tooltip', 
//    'title'=>'Will open the generated PDF file in a new window'
                ]);
            }
        ?>
    </p>

pdf.php

<?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],
            //'id',
            ['attribute' => 'nombre',
             'format' => 'raw',
             'value'=>function ($data) {
                        return Html::a($data['nombre'],['alumno/view', 'id' => $data['id']]);
                      },
             ],
            //'rut',
            ['attribute' => 'curso_id',
             'format' => 'raw',
             'value'=>function ($data) {
                        return Html::a($data['curso_id'],['curso/view', 'id' => $data['curso_id']]);
                      },
             ],
            //'fecha_nacimiento',
            //'fono',
            //'direccion',
            //'email:email',
            //'apoderado',
            ['attribute' => 'apoderado',
             'format' => 'raw',
             'value'=>function ($data) {
                          if ($data->apoderado_id != null)
                              return Html::a($data->apoderado->nombre, ['apoderado/view', 'id' => $data['apoderado_id']]);
                          else
                              return null;

                      },
             ],
            //'apoderado_suplente',
            //'fono_apoderado',
            //'fono_apoderado_sup',
            //'antecedentes_medicos',
            //'grupo_sanguineo',
            //'programa_integracion',
            //'taller_artistico',
            //'anotaciones',

            ['class' => ActionColumn::className(), 'template' => '{update} {delete}'],
        ],
    ]); ?>

我收到错误请求 (#400)

Se recibieron datos erróneos para el parametro “searchModel”

任何帮助将不胜感激。

【问题讨论】:

  • 请添加所有英文内容,当您使用POST请求但未提交CSRF token以及用于防止交叉的表单或请求时,会引发400网站脚本伪造

标签: yii2 yii2-basic-app


【解决方案1】:

我使用会话解决了这个问题,我在 actionGenerarPdf 中生成了 $searchModel 和 $dataProvider,而不是通过按钮发送它们。

我会引用来自 yii 论坛的@softark

“您不能将 $searchModel 和 $dataProvider 作为查询参数传递给操作方法,因为它们不是可以转换为简单字符串的简单变量。

所以你必须在你的 actionGenerarPdf 方法中创建搜索模型和数据提供者。

为了取回索引操作中使用的搜索参数,您可以将查询参数存储在会话中,并在 actionGenerarPdf 中检索它们。”

https://forum.yiiframework.com/t/print-gridview-search-in-pdf-using-kartik-mpdf-extension-solved/124925

这是代码

public function actionIndex()
    {
        
        $searchModel = new AlumnoSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
        
        $session = Yii::$app->session;
        $session->open();
        $session['query_params'] = json_encode(Yii::$app->request->queryParams);
        $session->close();
    
        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
        ]);
    }
public function actionGenerarPdf() 
    {
        $session = Yii::$app->session;
        $session->open();
        $queryParams = isset($session['query_params']) ? json_decode($session['query_params'], true) : [];
        $session->close();
        $searchModel = new AlumnoSearch();
        $dataProvider = $searchModel->search($queryParams);
        Yii::$app->response->format = \yii\web\Response::FORMAT_RAW;
        $formatter = \Yii::$app->formatter;
        $pdf = new Pdf([
            'mode' => Pdf::MODE_CORE, // leaner size using standard fonts
            'defaultFontSize' => 18,
            'orientation' => Pdf::ORIENT_PORTRAIT,
            'destination' => Pdf::DEST_BROWSER,
            //Se renderiza la vista "pdf" (que abrirá la nueva ventana)
            'content' => $this->renderPartial('pdf', ['searchModel' => $searchModel, 'dataProvider' => $dataProvider]),
            'options' => [
            // any mpdf options you wish to set
            ],
            'methods' => [
                'SetTitle' => 'SIE: Sistema de Informacion Estudiantil',
                'SetSubject' => 'Generating PDF files via yii2-mpdf extension has never been easy',
                'SetHeader' => ['SIE: Sistema de Información Estudiantil||Generado el: ' . $formatter->asDate(date("r"))],
                'SetFooter' => ['|Página {PAGENO}|'],
                'SetAuthor' => 'SIE: Sistema de información Estudiantil',
                'SetCreator' => 'Juan Carlos Reyes Suazo',
//              'SetKeywords' => 'Sie, Yii2, Export, PDF, MPDF, Output, yii2-mpdf',
            ]
        ]);
        return $pdf->render();
    }

我希望这可以帮助其他想要实现相同目标的人

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多