Formation Magento 2 : Chapitre 3 – Partie C

Installation de données (Datas setup)

Maintenant que nous avons nos tables et nos modèles, nous allons pouvoir remplir notre base de données !

Avant toute chose, nous allons ajouter deux méthodes à notre modèle Job.php.
Ouvrez le fichier
app/code/Maxime/Jobs/Model/Job.php

Et ajoutez-y les méthodes suivantes :

    public function getEnableStatus() {
        return 1;
    }

    public function getDisableStatus() {
        return 0;
    }

Passons maintenant a la création de notre setup. Nous allons passer par un setup de données qui devra être placé ici :
app/code/Maxime/Jobs/Setup/UpgradeData.php

Je vous met le code de la classe nous le détaillerons ensuite :

<?php
/**
 * Copyright © 2015 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */

namespace Maxime\Jobs\Setup;

use Maxime\Jobs\Model\Department;
use Maxime\Jobs\Model\Job;
use Magento\Framework\Setup\UpgradeDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;

/**
 * @codeCoverageIgnore
 */
class UpgradeData implements UpgradeDataInterface
{

    protected $_department;
    protected $_job;

    public function __construct(Department $department, Job $job){
        $this->_department = $department;
        $this->_job = $job;
    }

    /**
     * {@inheritdoc}
     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
     */
    public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {
        $installer = $setup;
        $installer->startSetup();

        // Action to do if module version is less than 1.0.0.1
        if (version_compare($context->getVersion(), '1.0.0.1') < 0) {
            $departments = [
                [
                    'name' => 'Marketing',
                    'description' => 'Sed cautela nimia in peiores haeserat plagas, ut narrabimus postea,
                aemulis consarcinantibus insidias graves apud Constantium, cetera medium principem sed
                siquid auribus eius huius modi quivis infudisset ignotus, acerbum et inplacabilem et in
                hoc causarum titulo dissimilem sui.'
                ],
                [
                    'name' => 'Technical Support',
                    'description' => 'Post hanc adclinis Libano monti Phoenice, regio plena gratiarum et
                venustatis, urbibus decorata magnis et pulchris; in quibus amoenitate celebritateque
                nominum Tyros excellit, Sidon et Berytus isdemque pares Emissa et Damascus saeculis condita
                priscis.'
                ],
                [
                    'name' => 'Human Resource',
                    'description' => 'Duplexque isdem diebus acciderat malum, quod et Theophilum insontem atrox
                interceperat casus, et Serenianus dignus exsecratione cunctorum, innoxius, modo non reclamante publico vigore,
                discessit.'
                ]
            ];

            /**
             * Insert departments
             */
            $departmentsIds = array();
            foreach ($departments as $data) {
                $department = $this->_department->setData($data)->save();
                $departmentsIds[] = $department->getId();
            }


            $jobs = [
                [
                    'title' => 'Sample Marketing Job 1',
                    'type' => 'CDI',
                    'location' => 'Paris, France',
                    'date'  => '2016-01-05',
                    'status' => $this->_job->getEnableStatus(),
                    'description' => 'Duplexque isdem diebus acciderat malum, quod et Theophilum insontem atrox
                interceperat casus, et Serenianus dignus exsecratione cunctorum, innoxius, modo non reclamante publico vigore,
                discessit.',
                    'department_id' => $departmentsIds[0]
                ],
                [
                    'title' => 'Sample Marketing Job 2',
                    'type' => 'CDI',
                    'location' => 'Paris, France',
                    'date'  => '2016-01-10',
                    'status' => $this->_job->getDisableStatus(),
                    'description' => 'Duplexque isdem diebus acciderat malum, quod et Theophilum insontem atrox
                interceperat casus, et Serenianus dignus exsecratione cunctorum, innoxius, modo non reclamante publico vigore,
                discessit.',
                    'department_id' => $departmentsIds[0]
                ],
                [
                    'title' => 'Sample Technical Support Job 1',
                    'type' => 'CDD',
                    'location' => 'Lille, France',
                    'date'  => '2016-02-01',
                    'status' => $this->_job->getEnableStatus(),
                    'description' => 'Duplexque isdem diebus acciderat malum, quod et Theophilum insontem atrox
                interceperat casus, et Serenianus dignus exsecratione cunctorum, innoxius, modo non reclamante publico vigore,
                discessit.',
                    'department_id' => $departmentsIds[1]
                ],
                [
                    'title' => 'Sample Human Resource Job 1',
                    'type' => 'CDI',
                    'location' => 'Paris, France',
                    'date'  => '2016-01-01',
                    'status' => $this->_job->getEnableStatus(),
                    'description' => 'Duplexque isdem diebus acciderat malum, quod et Theophilum insontem atrox
                interceperat casus, et Serenianus dignus exsecratione cunctorum, innoxius, modo non reclamante publico vigore,
                discessit.',
                    'department_id' => $departmentsIds[2]
                ]
            ];

            foreach ($jobs as $data) {
                $this->_job->setData($data)->save();
            }
        }

        $installer->endSetup();
    }
}

Notre classe contient 2 attributs en protected :
– department
– job

Nous definissons leur type dans la méthode construct :
– Department $department
– Job $job

Cela s’appelle de l’injection de dépendance. Cela veut dire que nous avons besoin de ces 2 modèles pour travailler avec notre classe.
Nous ne pouvons plus faire de Mage::getModel() comme l’on connu les developpeurs sous Magento 1.

Ensuite vient la méthode upgrade qui contient un tableau de données, puis boucle dessus pour créer les objets et les sauver en BDD.
A la sauvegarde des départements, nous enregistrons un tableau avec les ID créés, afin de pouvoir les utiliser pour la liaison avec un job.
Nous utilisons aussi nos 2 nouvelles méthode de la classe Job, pour récupérer la valeur du statut.

Vous avez peut-être remarqué que nous avons une condition sur la version de notre module.
Notre condition matche sur la version 1.0.0.1 .
Il vous faut donc ouvrir le fichier :
app/code/Maxime/Jobs/etc/module.xml

Et changer le « setup_version » à « 1.0.0.1 »

Vous pouvez lancer à la racine de votre Magento la commande upgrade :
./bin/magento setup:upgrade

Vous verrez un affichage de la sorte :


Module 'Maxime_Jobs':
Upgrading data..

Et maintenant si vous allez en BDD vous verrez vos données correctement sauvegardées.

department_datas

jobs_datas

Sachez qu’il est possible de créer une classe « InstallData.php » dans le dossier Setup, qui fonctionnera de la même façon que la classe « InstallSchema.php », qui sera lancée lors du premier upgrade de votre module.
Voici comment Magento lance les traitements lors d’un upgrade :

Setup\InstallSchema
Setup\UpgradeSchema
Setup\Recurring
Setup\InstallData
Setup\UpgradeData

Pour finir si vous vous rendez dans la table « setup_module » vous pourrez voir notre module avec sa version actuelle.
Vous pouvez modifier ses valeurs si vous souhaitez relancer les installations à partir d’une certaine version

setup_modules

Dans notre prochaine étape, nous allons gérer nos données depuis le back office Magento 🙂

Continuer la formation
Revenir à la partie précédente
Mise en place des données de notre module sous Magento 2
Taggé sur :        

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Nous utilisons des cookies afin de nous assurer de vous proposer la meilleure expérience sur ce site.
Ok