Définir un schéma

Pour utiliser EO Framework il est obligatoire de comprendre et de définir des schéma de donnée. C’est le rôle de EO Model, un module de EO Framework.

EO Model le contrôleur de donnée pour WordPress.

Il permet de définir des schémas de vos données afin de les rendre structurées et forcer le typage lors de l’enregistrement ou la récupération de vos données en base de donnée.

Pour les chapitres suivants, nous allons considérer que nous créons un objet définissant un produit.

Un objet EO-Model doit obligatoirement hérité des 4 objets standard WordPress que nous avons préparé pour vous:

  • EO-Post
  • EO-Comment
  • EO-Term
  • EO-User

Pour notre produit, nous allons hérité de EO-Post qui à sa propre définition de schéma.

Création du schéma

Avant toute chose, nous allons créer une classe héritant de EO-Post.

Considérons que notre produit doit avoir un prix, une tva et une couleur.

Les index disponible pour définir un schéma:

  • type (obligatoire)
    • float
    • integer
    • array
    • string
    • boolean
  • meta_type (obligatoire)
    • single
    • multiple
  • default (Valeur par défaut de la donnée)

Si type est égale array, vous pouvez utiliser array_type pour définir le type de donnée dans le tableau qui lui aussi prend les mêmes type de type.

Si meta_type est égale single, il faut définir field qui correspondra à l’entrée de la metakey.

<?php

class My_Product_Model extends \eoxia\Post_Model {

	public function __construct( $object, $req_method = null ) {
		$this->schema['price'] = array(
				'type'      => 'float',
				'meta_type' => 'single',
				'field'     => 'my_product_price'
		);

		$this->schema['tva'] = array(
			'type'      => 'float',
			'meta_type' => 'single',
			'field'     => 'my_product_tva',
		);

		$this->schema['color'] = array(
			'type'      => 'string',
			'meta_type' => 'multiple',
		);
		
		$this->schema['weight'] = array(
			'type'      => 'float',
			'meta_type' => 'multiple',
		);

		$this->schema['taxonomy'] = array(
			'type'      => 'array',
			'meta_type' => 'multiple',
			'child'     => array(
				'custom_tag' => array(
					'meta_type'  => 'multiple',
					'array_type' => 'integer',
					'type'       => 'array',
				),
			),
		);


		parent::__construct( $object, $req_method );
	}
}

La définition du schéma est terminée, nous devons maintenant configurer le contrôleur qui sera attaché à ce modèle.

Création du contrôleur

<?php

class My_Product_Class extends \eoxia\Post_Class {

	/**
	 * Le nom du modèle
	 *
	 * @var string
	 */
	protected $model_name = 'My_Product_Model'; // \your_namespace\My_Product_Model if you got a namespace.

	/**
	 * Le type du post ou du commentaire ou du term.
	 *
	 * @var string
	 */
	protected $type = 'my-product';

	/**
	 * La clé principale du modèle
	 *
	 * @var string
	 */
	protected $meta_key = 'my-product';

	/**
	 * La route pour accéder à l'objet dans la rest API
	 *
	 * @var string
	 */
	protected $base = 'my-product';

	/**
	 * La version de l'objet
	 *
	 * @var string
	 */
	protected $version = '0.1';

	/**
	 * La taxonomy lié à ce post type.
	 *
	 * @var string
	 */
	protected $attached_taxonomy_type = 'custom_tag';

}

My_Product_Class::g();