Распечатка gridview поиска в PDF с использованием расширения kartik-mPDF - PullRequest
0 голосов
/ 05 февраля 2019

Я использую библиотеку kartik-mpdf для генерации pdf моих сеточных представлений, я хочу передать $ dataProvider и $ searchModel из index.php в представление, которое будет отображаться как pdf-документ (pdf.php),Поэтому, когда я выполняю поиск по индексу и нажимаю кнопку «Generar pdf», он вызывает действие GenerarPdf для AlumnoController и загружает те же $ 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)

*1013.

1 Ответ

0 голосов
/ 05 февраля 2019

Я решил это с помощью сессий, и я сгенерировал $ searchModel и $ dataProvider в actionGenerarPdf вместо того, чтобы отправлять их кнопкой.

Я процитирую @softark с форума yii

"Вы не можете передать $ 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();
    }

Надеюсь, это поможет другим, кто хочет достичь того же

...