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.
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
Dans notre prochaine étape, nous allons gérer nos données depuis le back office Magento 🙂