Configuration d'une source de données

Définition

Une source de données désigne un système stockant des données qui sont accessibles en lecture et/ou en écriture. Ce type de système propose plusieurs solutions : base de données, base noSQL, fichier indexé, fichier texte...

Dans le cadre de la première version du framework Aventy, la base de données MySQL/MariaDB sera utilisée comme source de données principale.

Configuration de l'accès à MySQL/MariaDB

Le framework Adventy permet l'accès à plusieurs bases de données, et la gestion automatique des transactions. La déclaration de ces accès est définie dans un fichier de configuration avec la structure suivante :

<?php 
//Data sources list
$_dataSources = [
	//First data source
	'<key1>Ds' => [
		'type' => '<mysqli|postgresql|oracle>',
		'serverName' => '<127.0.0.1>',
		'userName' => '<userName>',
		'password' => '<password>',
		'dataSourceName' => '<databaseName>',
		'port' => <3306>
	],
	
	//Second data source
	'<key2>Ds' => [
		'type' => '<mysqli|postgresql|oracle>',
		'serverName' => '<127.0.0.1>',
		'userName' => '<userName>',
		'password' => '<password>',
		'dataSourceName' => '<databaseName>',
		'port' => <3306>
	],
	
	//Third data source
	//...
];
?>

Cette structure de données est spécifique à MySQL/MariaDB. Elle sera différente pour un autre type de base de données, tel qu'Oracle par exemple.

Pour configurer un accès à la base de données MySQL/MariaDB d'un environnement donné (local, développement, test, recette, production, ...) :

  1. aller dans le dossier /application/configuration/ ;
  2. copier/coller le fichier modèle de configuration _sample.loc.datasource.cfg.php ;
  3. renommer ce fichier en remplaçant _sample.loc par le nom de domaine de l'environnement sur lequel la base de données est utilisée. Par exemple adventy.loc.datasource.cfg.php pour une base de données en local, et adventy.org.datasource.cfg.php pour la production. Il doit y avoir autant de fichiers de configuration que d'environnements ;
  4. renseigner les informations d'accès à la base de données MySQL/MariaDB :
    • <keyxxx>Ds : nom de la source de données composé de <keyxxx> qui est le nom de variable désignant la base de données en camel case, et du suffixe Ds pour indiquer que c'est une source de données (Data source) ;
    • type : mettre mysqli pour MySQL/MariaDB. La version expérimentale du framework Adventy ne gère que cette base de données pour le moment ;
    • serverName : nom du serveur ou son IP (ex : 127.0.0.1) sur lequel est installé la base de données ;
    • userName : nom d'utilisateur (ex : myUserName) pour la connexion à la base de données ;
    • password : mot de passe (ex : #mySecretPassword123) pour la connexion à la base de données ;
    • dataSourceName : nom de la base de données ;
    • port : numéro de port (ex : 3306) de connexion à la base de données.
  5. enregistrer le fichier, puis renouveler la procédure depuis le début pour la configuration des autres environnements.

Accès aux sources de données

L'accès à une source de données s'effectue à l'aide de son nom défini dans le fichier de configuration <domainName>.<domainNameExtension>.datasource.cfg.php, c'est-à-dire par la clé <keyxxx>Ds.

Selon l'architecture adopté par le framework Adventy, l'appel à une source de données ne devrait se faire qu'à partir d'un BO. Par exemple, si la source de données est nommée myDatabaseNameDs, alors son utilisation dans un BO ressemblerait par exemple à :

<?php 
namespace model\bo\myManager;

/**
 * My business model class suffixed by Bo.
 * @author xxx
 * @version 0.1
 * @package model.bo.my-manager
 */
class MyUserBo extends \org\adventy\model\bo\AbstractBo {
	...
	/**
	 * Display user data.
	 * @return void
	 * @uses /my-manager/my-user/get-user?userId=369
	 */
	public function getUserAction() {
		//Retrieve parameters from $_GET and $_POST
		$parameters = &$this->_parameters;
		...
		//Prepare user filter: set primary key
		$filters = array('userId' => &$parameters['userId']);
		
		//Retrieve user data: store result in view variable $this->userData
		$this->userData = $this->myDatabaseNameDs->userDao->get($filters);
		...
	}
	...
}
?>

L'exemple de code ci-dessus a été repris de la documentation sur les modèles métiers. Veuillez remarquer les dernières lignes :

<?php 		
//Retrieve user data: store result in view variable $this->userData
$this->userData = $this->myDatabaseNameDs->userDao->get($filters);
?>

Pour bien comprendre l'accès aux données :

  1. une instance de la source de données myDatabaseNameDs est créée dans le BO, et est donc accessible par $this->myDatabaseNameDs ;
  2. cette source de données permet d'accéder aux DAO, qui sont une abstraction des tables de la base de données. Dans notre exemple, nous accédons à la table user par $this->myDatabaseNameDs->userDao ;
  3. et enfin, nous récupérons les données d'un utilisateur via la méthode get comme ceci : $this->myDatabaseNameDs->userDao->get.

Pour lire et/ou écrire dans une source de données, il faut retenir l'enchaînement des composants suivant : $this-><dataSourceName>Ds-><tableName>Dao-><method>(...)