Skip to main content

13. PDF genereren

Je kunt data exporteren naar bijvoorbeeld een excel bestand of PDF. Dit kan ook met YII maar daarvoor heb je wel een extentie nodig die dit voor je regelt. Hoe dat in zijn werk gaat dat zie je in dit hoofdstuk.

1. Installeer de volgende extentie: yii2-export door de volgende command in de terminal van je project te zetten:

php composer require kartik-v/yii2-export "*"

2. Kies een Controller uit waar je de PDF-extentie wilt gebruiken. Stel bijvoorbeeld dat je een overzicht wilt printen van alle Projecten of alle Auto's. Je kunt in principe van alle index overzichten een pdf (of excel) maken.

In het voorbeeld hieronder maken we gebruik van een AppointmentController

Bovenin de controller zet je de volgende regel neer

use kartik\export\ExportMenu;

3. We verbouwen de boel een beetje zodat de logica klopt. In de view index.php wordt de gridview aangemaakt. Dit gaan we aanpassen

Van dit:

<!-- dit is de index.php van Appointment -->
<?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],


            'id',
            [
                'attribute' => 'appointment_id',
                'label'     => 'Appointment',
                'value'     => 'appointment.name'
            ],
            [
                'attribute' => 'part_id',
                'label'     => 'Part',
                'value'     => 'part.name'
            ],


            ['class' => 'yii\grid\ActionColumn'],
        ],
    ]);

Naar dit:  Hiermee worden de kolommen van de tabel niet aangemaakt in de view index.php maar in de controller zelf.

<!-- dit is de index.php van Appointment -->     
<?= \kartik\grid\GridView::widget(
            [
                'dataProvider' => $dataProvider,
                'filterModel' => $searchModel,
                'columns' => $gridColumns,
            ],
        );

        // Renders a export dropdown menu
        echo ExportMenu::widget([
            'dataProvider' => $dataProvider,
            'columns' => $gridColumns
        ]);

        ?>

4. Omdat we een overzicht willen hebben van alle Afspraken, dus de index, gaan we naar de method actionIndex() van de desbetreffende controller (in dit voorbeeld de AppointmentController.

// AppointmentController.php
$gridColumns = [
            ['class' => 'yii\grid\SerialColumn'],
            'id',
            [
                'attribute' => 'appointment_id',
                'label'     => 'Appointment',
                'value'     => 'appointment.name'
            ],
            [
                'attribute' => 'part_id',
                'label'     => 'Part',
                'value'     => 'part.name'
            ],
            ['class' => 'yii\grid\ActionColumn'],
        ];


        $menu = ExportMenu::widget([
            'dataProvider' => $dataProvider,
            'columns'      => $gridColumns
        ]);

        return $this->render('index', [
            'searchModel'   => $searchModel,
            'dataProvider'  => $dataProvider,
            'gridColumns'   => $gridColumns,
            'menu'          => $menu,
        ]);