Aller plus loin : mode expert

Les Transformers sont le cœur de la personnalisation du module. Ils permettent d’adapter le comportement sans toucher au pipeline global.

Le module mets à disposition des interfaces de transformation de ligne pour les imports et les exports.

Un transformateur de ligne permet de réaliser des transformations des lignes de données brutes afin d'exporter ou importer.

Les RowImportTransformer

Les RowTransformer doivent respecter une Interface RowImportTransformer

use fractalCms\importExport\interfaces\RowImportTransformer as RowImportTransformerInterface;

final class ImportRowTransformer implements RowImportTransformerInterface
{


    /**
     * @return string
     */
    public function getName(): string
    {
        return 'nom-1';
    }

    /**
     * @param array $row
     * @param ImportContext $context
     * @return RowTransformerResult
     */
    public function transformRow(array $row, ImportContext $context): RowTransformerResult
    {
        try {
            /**
            * Ici le code de traitement de la ligne avant l'import
            * 
            **/
            return new RowTransformerResult($row, true);
        } catch (Exception $e)  {
            Yii::error($e->getMessage(), __METHOD__);
            throw  $e;
        }
    }
}

Afin de pouvoir l'utiliser, le RowImportTransformer doit être ajouté dans la configuration de l'application

'fractal-cms-export' => [
        'class' =>  \fractalCms\importExport\Module::class,
        'pathsNamespacesModels' => [
            '@app/models' => 'app\\models\\', /*path des models active record de votre application*/
        ],
        /*Ajout de transformer de ligne (RowTransformer)*/
        'rowTransformers' => [
        /* Pour les configurations import*/
            'import' => [
                'nom-1' => [
                    'class' => ImportRowTransformer::class,
                    'label' => 'Nom 1 (Import)',
                ],
            ],
        ],
    ],

il suffit ensuite de le sélectionner dans le formulaire pour que toutes les lignes soient traitées par le transformer.

Les RowExportTransformers

Les RowExportTransformer doivent réspecter une Interface RowExportTransformer

use fractalCms\importExport\interfaces\RowExportTransformer as RowExportTransformerInterface;

final class ExportRowTransformer implements RowExportTransformerInterface
{


    /**
     * @return string
     */
    public function getName(): string
    {
        return 'nom-2';
    }

    /**
     * @param array $row
     * @param ExportContext $context
     * @return RowTransformerResult
     */
    public function transformRow(array $row, ExportContext $context): RowTransformerResult
    {
        try {

            /**
            * Icic le code de traitement de la ligne avant de l'écrire dans le fichier
            *
            **/
            $context->writeRow(sheet: 'structure',row: $row,startRow: $context->rowNumber);
            return new RowTransformerResult($row, true);
        } catch (Exception $e)  {
            Yii::error($e->getMessage(), __METHOD__);
            throw  $e;
        }
    }
}

Afin de pouvoir l'utiliser, le RowExportTransformer doit être ajouté dans la configuration de l'application

'fractal-cms-export' => [
        'class' =>  \fractalCms\importExport\Module::class,
        'pathsNamespacesModels' => [
            '@app/models' => 'app\\models\\', /*path des models active record de votre application*/
        ],
        /*Ajout de transformer de ligne (RowTransformer)*/
        'rowTransformers' => [
        /* Pour les configurations import*/
            'import' => [
                'nom-1' => [
                    'class' => ImportRowTransformer::class,
                    'label' => 'Nom 1 (Import)',
                ],
            ],
        /* Pour les configurations export*/
            'export' => [
                'nom-1' => [
                    'class' => ExportRowTransformer::class,
                    'label' => 'Nom 1 (export)',
                ],
            ],

        ],
    ],

il suffit ensuite de le sélectionner dans le formulaire pour que toutes les lignes soient traitées par le transformer.