Skip to main content

13. PDF genereren (optioneel)

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:

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

2. Zorg ervoor dat de extentie in je project geactiveerd is. Open web.php

Voeg de onderstaande code toe achter 'components'

'components' => [
      ],
'modules' => [
  'gridview' => ['class' => 'kartik\grid\Module']
],

3. 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;

4. 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 $menu;

        ?>

5. 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,
        ]);