Formation Magento 2 : Chapitre 3 – Partie B

Déclaration des models

Nous allons déclarer notre premier modèle, le modèle « Department ». Pour le moment, nous allons créer un modèle simple, sans passer par les interfaces que nous verrons dans un prochain chapitre (Services Contracts).

Nous allons lui définir :extends AbstractCollection
– Un prefixe d’evenement ($_eventPrefix)
– Un nom d’objet pour les événements ($_eventObject)
– Un nom de champ ID ($_idFieldName)

Créez le fichier
app/code/Maxime/Jobs/Model/Department.php

Notre classe contiendra donc le contenu suivant :

<?php
namespace Maxime\Jobs\Model;

use \Magento\Framework\Model\AbstractModel;

class Department extends AbstractModel
{
    const DEPARTMENT_ID = 'entity_id'; // We define the id fieldname

    /**
     * Prefix of model events names
     *
     * @var string
     */
    protected $_eventPrefix = 'jobs'; // parent value is 'core_abstract'

    /**
     * Name of the event object
     *
     * @var string
     */
    protected $_eventObject = 'department'; // parent value is 'object'

    /**
     * Name of object id field
     *
     * @var string
     */
    protected $_idFieldName = self::DEPARTMENT_ID; // parent value is 'id'

    /**
     * Initialize resource model
     *
     * @return void
     */
    protected function _construct()
    {
        $this->_init('Maxime\Jobs\Model\ResourceModel\Department');
    }

}

Remarquez que dans la fonction construct, on déclare un ResourceModel, nous allons le créer lors de l’étape suivante.

Pour le modèle « Job » nous aurons grosso-modo la même chose.

Créez le fichier
app/code/Maxime/Jobs/Model/Job.php

Avec le contenu :

<?php
namespace Maxime\Jobs\Model;

use \Magento\Framework\Model\AbstractModel;

class Job extends AbstractModel
{
    const JOB_ID = 'entity_id'; // We define the id fieldname

    /**
     * Prefix of model events names
     *
     * @var string
     */
    protected $_eventPrefix = 'jobs';

    /**
     * Name of the event object
     *
     * @var string
     */
    protected $_eventObject = 'job';

    /**
     * Name of object id field
     *
     * @var string
     */
    protected $_idFieldName = self::JOB_ID;

    /**
     * Initialize resource model
     *
     * @return void
     */
    protected function _construct()
    {
        $this->_init('Maxime\Jobs\Model\ResourceModel\Job');
    }
}

Déclaration des ResourceModel

Nos deux modèles sont créés, nous devons mettre en place les ResourceModel désormais.

Créez le fichier
app/code/Maxime/Jobs/Model/ResourceModel/Department.php

Et mettez-y ce contenu :

<?php
namespace Maxime\Jobs\Model\ResourceModel;

use \Magento\Framework\Model\ResourceModel\Db\AbstractDb;

/**
 * Department post mysql resource
 */
class Department extends AbstractDb
{

    /**
     * Initialize resource model
     *
     * @return void
     */
    protected function _construct()
    {
        // Table Name and Primary Key column
        $this->_init('maxime_department', 'entity_id');
    }

}

Dans cette classe, peu d’information.
Dans le construct nous definission dans la méthode init deux infos :
– Le nom de la table
– Le nom de la colonne qui est notre colonne primaire

Faisons la même chose pour la classe Job :
app/code/Maxime/Jobs/Model/ResourceModel/Job.php

Avec :

<?php
namespace Maxime\Jobs\Model\ResourceModel;

use \Magento\Framework\Model\ResourceModel\Db\AbstractDb;

/**
 * Department post mysql resource
 */
class Job extends AbstractDb
{

    /**
     * Initialize resource model
     *
     * @return void
     */
    protected function _construct()
    {
        // Table Name and Primary Key column
        $this->_init('maxime_job', 'entity_id');
    }

}

Même principe que pour notre classe précédente !
N’hésitez pas a consulter le contenu de la classe Magento « AbstractDb » histoire de voir de quoi elle se compose 😉

Création des classes Collection

Dernière étape avant de manipuler nos modèles, il faut leur définir une classe collection.
Cela permettra de gérer des collections de données, avec des méthodes très utiles telles que des tris, des limites etc…

On commence donc avec notre objet Department :
app/code/Maxime/Jobs/Model/ResourceModel/Department/Collection.php

Qui contient :

<?php
namespace Maxime\Jobs\Model\ResourceModel\Department;

use \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;

class Collection extends AbstractCollection
{

    protected $_idFieldName = \Maxime\Jobs\Model\Department::DEPARTMENT_ID;

    /**
     * Define resource model
     *
     * @return void
     */
    protected function _construct()
    {
        $this->_init('Maxime\Jobs\Model\Department', 'Maxime\Jobs\Model\ResourceModel\Department');
    }

}

Vous l’aurez deviné, dans la méthode init, il y’a deux paramètres :
– Le chemin de notre Model
– Le chemin de notre ResourceModel

Et donc cela va de soi pour notre objet Job :
app/code/Maxime/Jobs/Model/ResourceModel/Job/Collection.php

Avec :

<?php
namespace Maxime\Jobs\Model\ResourceModel\Job;

use \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;

class Collection extends AbstractCollection
{

    protected $_idFieldName = \Maxime\Jobs\Model\Job::JOB_ID;

    /**
     * Define resource model
     *
     * @return void
     */
    protected function _construct()
    {
        $this->_init('Maxime\Jobs\Model\Job', 'Maxime\Jobs\Model\ResourceModel\Job');
    }

}

Pour votre culture, jetez un oeil également à la classe Magento « AbstractCollection » histoire de voir les méthodes qu’elle contient 🙂

Ces modèles vont nous permettre de manipuler des objets de type « Job » et « Department ».
Et ce ce que nous ferons dès le prochain article !

Continuer la formation
Revenir à la partie précédente
Creation d’un modèle sous Magento 2
Share on FacebookTweet about this on TwitterShare on Google+Email this to someone
Taggé sur :        

Une réflexion sur “Creation d’un modèle sous Magento 2

  • 27/06/2018 à 12:03
    Permalink

    euh… le premier eventPrefix n’est pas plutot ‘departements’ que ‘jobs’ ?

    Répondre

Laisser un commentaire

Votre adresse de messagerie 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