Nous allons voir comment ajouter un nouvel objet personnalisé dans l’api Prestashop via un module.
Cette méthodologie fonctionne sous Prestashop 1.7
L’objectif est d’ajouter de rendre un nouvel objet « Sample » qui pourra être manipulé via l’api.
Pour cela nous allons créer un module hhapisample
Ce module va ajouter une entité « sample » qui sera gérable via l’API.
Cette entité aura uniquement les paramètres suivants :
- référence
- nom ( multilingue )
- description ( multilingue )
Voici le code de cette entité à placer dans le fichier classes/Sample.php du module.
/**
* Classe d'exemple pour le webservice
*/
class Sample extends ObjectModel {
/** @var string Référence du document */
public $reference;
/** @var string nom */
public $name;
/** @var string description */
public $description;
/**
* Définition des paramètres de la classe
*/
public static $definition = array(
'table' => 'sample',
'primary' => 'id_sample',
'multilang' => true,
'multilang_shop' => false,
'fields' => array(
'reference' => array('type' => self::TYPE_STRING, 'validate' => 'isCleanHtml', 'size' => 255),
'name' => array('type' => self::TYPE_STRING, 'validate' => 'isCleanHtml', 'size' => 255 , 'lang' => true),
'description' => array('type' => self::TYPE_STRING, 'validate' => 'isCleanHtml' , 'lang' => true),
),
);
/**
* Mapping de la classe avec le webservice
*
* @var type
*/
protected $webserviceParameters = [
'objectsNodeName' => 'samples', //objectsNodeName doit être la valeur déclarée dans le hookAddWebserviceResources ( liste des entités )
'objectNodeName' => 'sample', // Détail d'une entité
'fields' => []
];
} |
/**
* Classe d'exemple pour le webservice
*/
class Sample extends ObjectModel {
/** @var string Référence du document */
public $reference;
/** @var string nom */
public $name;
/** @var string description */
public $description;
/**
* Définition des paramètres de la classe
*/
public static $definition = array(
'table' => 'sample',
'primary' => 'id_sample',
'multilang' => true,
'multilang_shop' => false,
'fields' => array(
'reference' => array('type' => self::TYPE_STRING, 'validate' => 'isCleanHtml', 'size' => 255),
'name' => array('type' => self::TYPE_STRING, 'validate' => 'isCleanHtml', 'size' => 255 , 'lang' => true),
'description' => array('type' => self::TYPE_STRING, 'validate' => 'isCleanHtml' , 'lang' => true),
),
);
/**
* Mapping de la classe avec le webservice
*
* @var type
*/
protected $webserviceParameters = [
'objectsNodeName' => 'samples', //objectsNodeName doit être la valeur déclarée dans le hookAddWebserviceResources ( liste des entités )
'objectNodeName' => 'sample', // Détail d'une entité
'fields' => []
];
}
La définition du webservice est géré dans l’objet est configuré dans la variable $webserviceParameters
Pour rendre disponible cette entité, il faut greffer votre module sur le hook addWebserviceResources
/**
* Ajout de la nouvelle entité au webservice
* @param $params
* @return array
*/
public function hookAddWebserviceResources($params) {
return [
'samples' => [ //Nom du paramètre $webserviceParameters['objectsNodeName'] de la classe Objet
'description' => 'Sample new entity for API',
'class' => 'Sample'
],
];
} |
/**
* Ajout de la nouvelle entité au webservice
* @param $params
* @return array
*/
public function hookAddWebserviceResources($params) {
return [
'samples' => [ //Nom du paramètre $webserviceParameters['objectsNodeName'] de la classe Objet
'description' => 'Sample new entity for API',
'class' => 'Sample'
],
];
}
Une fois le module installé, vous pouvez-voir dans la liste des objets de l’api que l’entité sample est bien visible.…