Introduction

Qu'est-ce que Genos ?

Genos est un micro-framework PHP qui va vous permettre de réaliser les tâches les plus récurrentes en un tour de main.Genos vous permettra de consulter, enregistrer et mettre à jour des enregistrements stockés en basede données, avec quelques lignes de code seulement.

Pourquoi utiliser Genos ?

Avec quel framework travailler ? C’est probablement une des premières questions que se posent les développeurs qui débutent avec le langage PHP. Il en existe de très bons mais tous demandent un temps d’apprentissage et de maîtrise considérable. Ils ne sont d’autre part pas tous adaptés à l’ensemble de vos projets. Genos est un framework qui demande seulement les connaissances de base en programmation orientée objet. Cerise sur le gâteau, le framework Genos vous demandera uniquement 30 min d’apprentissage !

Installation

L’installation est très rapide, suivez les instructions suivantes :

  • Importer le dossier genos dans votre projet
  • Inclure le fichier config-genos.php dans votre PHP
  • Configurer le fichier config-genos.php

Conditions Requises

L’implémentation du framework Genos nécessite le respect des contraintes suivantes :

  • Disposer d’une clé primaire de type “auto incrément” dans chaque table
  • Chacune des tables de votre BDD doit correspondre à une classe de votre projet (portant le même nom) et chaque champs devra correspondre à un attribut de la classe (également les mêmes noms)

Imaginons une table nommée student composée des champs :

  • id
  • firstname
  • lastname
  • birthday

Nous devrons avoir une classe PHP se nommant student comme suit :
class student {

	private $id;
	private $firstname;
	private $lastname;
	private $birth;

	public function __construct (){
		$this ->id 		= 0;
		$this ->firstname 	= "" ;
		$this ->lastname 	= "" ;
		$this ->birth = "0000-00-00" ;
	}
}

Configuration

ID_PRIMARY_DEFAULT

Valeur par défaut : true

Cette variable globale permet de définir si l’intitulé de votre clé primaire de type auto incrément se nommera “id” ou non. Si la valeur de cette variable est définie à false, il faudra créer un attribut de classe “primary_key” qui contiendra le nom de votre clé primaire de type auto incrément.

class student {

	private $primary_key;
	private $id;
	private $firstname;
	private $lastname;
	private $birth;

	public function __construct (){
		$this ->primary_key = "id_student" ;
		$this ->id 			= 0;
		$this ->firstname 		= "" ;
		$this ->lastname 		= "" ;
		$this ->birth		 = "0000-00-00" ;
	}
}

TABLE_CASE

Valeur par défaut : lowercase

Comme vous le savez sûrement, si vous hébergez une base de données et un site/application PHP, il y a de forte chance que vous soyez sur un serveur Linux. Contrairement à Windows, ce dernier est case sensitive, c’est à dire qu’il différencie les minuscules et les majuscules. Autrement dit la table student sera différente de la table Student . La variable globale $TABLE_CASE vise à gérer cette problématique. Par défaut sa valeur elle fixée à lowercase mais elle peut posséder les valeures suivantes :

  • lowercase
  • uppercase
  • capitalize
  • custom

Si vous optez pour la valeur “custom”, il faudra déclarer dans chaque classe le nom de votre table avec sa casse précise via l’attribut table_name.
class student {
	private $table_name;
	private $id;
	private $firstname;
	private $lastname;
	private $birth;
	public function __construct (){
		$this ->table_name = "Student" ;
		$this ->id 			= 0;
		$this ->firstname 		= "" ;
		$this ->lastname		 = "" ;
		$this ->birth	 = "0000-00-00" ;
	}
}

DATABASE_NAME

Saisissez le nom de votre base de données

DATABASE_HOST

Définit le host de connexion à votre base de données

DATABASE_PORT

Définit le port utilisé.

DATABASE_USER

Définit le nom d’utilisateur de votre base de données.

DATABASE_PSWD

Définit le mot de passe de votre base de données.

Quick Start

Félicitation ! Votre fichier config-genos.php étant configuré vous pouvez utiliser le framwework Genos.

Pour ce faire vous devez incorporer le framework dans chacune des classes pour lesquelles vous prévoyez un usage du framework Genos.

Genos est un "trait” (lien sur la doc officielle PHP) , ce qui signifie que pour hériter de ses attributs et méthodes il va falloir importer le framework comme ceci :

class student {
	use Genos ;
	private $table_name;
	private $id;
	private $firstname;
	private $lastname;
	private $birth;

	public function __construct (){

		$this ->table_name = "Student" ;
		$this ->id = 0;
		$this ->firstname = "" ;
		$this ->lastname = "" ;
		$this ->birth = "0000-00-00" ;
	}
}
Index.php
$s = new student;
$s->Set( "firstname" , "John" );
$s->Set( "lastname" , "Doe" );
$s->Set( "birth" , "22-10-1981" );
$s->Add();
Maintenant, consultez votre table student dans votre base de données, vous devriez voir un nouvel étudiant nommé John Doe dans la liste des enregistrements.

Méthodes

Set()

Set(string:$attribute, any:$value)

La méthode Set() permet d’assigner une valeur à un attribut de votre classe.

Utilisation

$s = new student;
$s->Set( "firstname" , "John" );
Note : si vos attributs sont publiques vous pouvez y accéder directement sans passer par la méthode Set()

Get()

any: Get(string:$attribute)

La méthode Get() vous retournera la valeur d’un attribut de la classe.

Utilisation

$s = new student;
$s->Set( "firstname" , "John" );
$fn = $s->Get( "firstname" );
echo $fn;
Note : si vos attributs sont publics vous pouvez y accéder directement sans avoir à utiliser la méthode Get().

Add()

La méthode Add() va vous permettre d’insérer toutes les valeurs contenues dans votre objet dans votre table BDD.

Utilisation

$s = new student;
$s->Set( "firstname" , "John" );
$s->Set( "lastname" , "Doe" );
$s->Set( "birth" , "22-10-1981" );
$s->Add();
Note : la méthode Add() se charge de traiter vos types de données suivant le type de champs en base de données.

Par exemple l’attribut birth correspond au champs birth dans votre base. Ce dernier étant de type date, Genos se chargera automatiquement de la conversion

Load()

La méthode Load() permet de récupérer toutes les informations liées à un enregistrement dont la clé primaire est fournie et les insère dans votre objet.

Utilisation

$s = new student;
$s->Set( "id" ,1);
$s->Load();
Il est important de définir une valeur dans votre attribut correspondant à votre clé primaire avant d’appeler la méthode Load().

Update()

La méthode Update() permet la mise à jour d’un enregistrement dans votre table en prenant en compte la valeur de votre clé primaire.

Utilisation

$s = new student;
$s->Set( "id" ,1); // Je renseigne l'élément que je veux charger
$s->Load();
$s->Set( "firstname" , "Oliver" );
$s->Update(); // je modifie l'élément qui a pour id = 1

Delete()

La méthode Delete() supprime un enregistrement en prenant en compte la valeur de la clé primaire contenu dans votre objet.

Utilisation

$s = new student;
$s->Set( "id" ,1); // Je renseigne l'élément que je veux charger
$s->Delete();

LoadForm()

Qu’y a t-il de plus rébarbatif en PHP que de traiter un formulaire ? La méthode LoadForm() va vous faire gagner un temps considérable sur ce type de traitement.

Les conditions d’utilisation de la méthode sont :

  • Formulaire POST
  • Le nom des champs du formulaire doivent correspondre avec le nom des attributs de la classe
$s = new student;
$s->Set( "firstname" , "John" );
$fn = $s->Get( "firstname" );
echo $fn;
L’exemple ci dessus va :

  • Récupérer les informations du formulaire
  • Les insérer dans l’objet $s
  • Ajouter le contenu de l’objet dans la base de données

LoadArray()

La méthode LoadArray() récupère les valeurs contenues dans un tableau associatif et les insère dans l’objet appelant la méthode.

Utilisation

$arr = new array ();
$arr[ "firstname" ] = "Eikichi" ;
$arr[ "lastname" ] = "Onizuka" ;
$arr[ "birth" ] = "10-03-1980" ;

$s = new student;
$s->LoadArray($arr);
$s->Add();
L’exemple ci-dessus va :

  • Créer un tableau associatif contenant des informations
  • La méthodeLoadArray() fait correspondre les valeurs contenues dans le tableau avec les attributs de l’objet
  • Ajouter le contenu de l’objet dans la base de données

IdList()

array :IdList(string:$query, [ array :$bind])

La méthode IdList() retourne un tableau contenant une liste de clé primaire correspondant aux résultats de la requête passée en paramètre.

Le tableau optionnel $bind correspond à un tableau de bindage pour sécuriser votre requête avec des valeurs provenant de l’extérieur. Utilisation

$query = "SELECT * FROM Student" ;
$s = new student;
$s->IdList($query);

Find()

array :Find( array :$array)

La méthode Find() retourne un tableau à deux dimensions contenant les résultats en prenant comme paramètre les valeurs du tableau $array.

Utilisation

$arr = array ();
$arr[ "firstname" ] = "John" ;
$s = new student;
$res = $s->Find($arr);
Le code ci-dessus va :

  • Créer une variable $arr de type tableau;
  • Créer une clé qui correspond à un attribut de notre classe;
  • Créer un objet $s de type student;
  • Retourner dans un tableau, grâce à la méthode Find(), tous les enregistrements dont le champs firstname est John.

Le nombre de clés dans le tableau $arr est illimité et cumulatif. Si par exemple vous avez un tableau :
$arr = array ();
$arr[ "firstname" ] = "John" ;
$arr[ "lastname" ] = "Doe" ;
La méthode Find() retourne tous les enregistrements dont le firstname est égal à John et dont le lastname est égal à Doe.

StructList()

array :StructList(string:$query, array :$returnFields, [ array :$bind],[string:$json])

$query : votre requête sql $returnFields : tableau contenant une liste de chaîne, chaque chaîne étant le nom d’un champ que vous voulez récupérer. $bind : Il peut arriver que pour des notions de sécurité vous soyez contraint d’avoir dans vos requêtes des valeurs bindées. Ce tableau optionnel vous servira de correspondance entre les clés de bindage et les valeurs réelles. $json : Si cette chaîne de caractère optionnelle a pour valeur “ json ” alors la fonction StructList() vous retournera un tableau de JSON. Utilisation

$query = "SELECT id, firstname, birth FROM Student" ;
$fields = array ( "id" , "firstname" , "birth" );
$s = new student;
$res = $s->StructList($querry,$fields);
L’exemple va :

  • Executer la requête $query
  • $fields indique les champs existants dans la requête $query
  • $res recevra un tableau multidimensionnel

Utilisation JSON
$query = "SELECT id, firstname, birth FROM Student" ;
$fields = array ( "id" , "firstname" , "birth" );
$s = new student;
$res = $s->StructList($querry,$fields, "json" );
L’exemple va :

  • Executer la requête $query
  • $fields indique les champs existants dans la requête $query
  • $res recevra un tableau de json

Utilisation Bindage
$firstname = $_GET[ "firstname" ];
$query = "SELECT id, firstname, birth FROM Student WHERE firstname =
:firstname" ;
$fields = array ( "id" , "firstname" , "birth" );
$bind = array ( "firstname" => $firstname);

$s = new student;
$res = $s->StructList($querry,$fields,$bind);
Dans cet exemple nous avons une variable $firstname qui provient d’une variable globale GET. Cela implique que n’importe qui peut la modifier.

Si un utilisateur malveillant injecte du code SQL dans cette variable ce code risquerait de s’exécuter.

Pour se protéger nous allons utiliser le bindage comme solution.

Sql()

[ array :]Sql(string:$query,[string:$returnValue...], [ array :$bind])

La méthode Sql() lance une requête SQL, la sécurise avec un tableau de bindage et permet même d’obtenir un tableau de résultats.

Utilisation

$req = "UPDATE Student SET birth = '1981-10-22' " ;
$s->Sql($req);
L’exemple met à jour le champs birth de tous les enregistrements de la table student.
$s = new student;

$req = "SELECT * FROM Student" ;
$res = $s->Sql($req, "id" );
L’exemple retourne la liste des id dans la variable $res
$s = new student;

$req = "SELECT * FROM Student" ;
$res = $s->Sql($req, "id" , "firstname" , "lastname" );
L’exemple retourne la liste des id , firstname et lastname de la table Student.
$s = new student;

$bind = array ( "id" =>$_GET[ "id" ]);
$req = "SELECT * FROM Student WHERE id = :id" ;
$res = $s->Sql($req, "id" , "firstname" , "lastname" ,$bind);

SelectList()

SelectList(string:$selectName, string:$fieldValue, string: $fieldOptionText..., [ array :$config],[int:$selectId])

La fonction SelectList() permet de créer une liste déroulante HTML (balise select) en relation avec votre base de données.

$selectName : Correspond à la valeur de l’attribut name de la balise select $fieldValue : Correspond à la valeur du champs qui sera inséré dans l’attribut value de la balise option $fieldOptionText : Correspond à la valeur des champs qui seront affichés dans la liste $config : Tableau optionnel de configuration $selectId : Si le dernier paramètre est un entier alors Genos va présélectionner cette valeur. Utilisation :

$s = new student;
$s->SelectList( "id_student" , "id" , "firstname" , "lastname" );
Résultat HTML



Présélection auto :

Résultat HTML



L’utilisation du tableau de Configuration

Suivant les clés présentes dans le tableau de configuration vous allez pouvoir paramétrer votre balise select

Preselect & PreselectVal
$s = new student;
$config = array ();
$config[ "preselect" ] 	= "Choose student" ;
$config[ "preselectVal" ] 	= 0;

$s->SelectList( "id_student" , "id" , "firstname" , "lastname" ,$config,2);
Rendu HTML



Class

Si vous souhaitez ajouter une ou plusieurs class à votre balise select
$s = new student;
$config = array ();
$config[ "class" ] = "form-control myclass myclass2" ;
$s->SelectList( "id_student" , "id" , "firstname" , "lastname" ,$config,2);
Rendu HTML

	
	



Sql & Bind

Il se peut que vous ayez besoin de sélectionner des données qui proviennent de plusieurs tables ou qui proviennent de résultats de fonctions SQL (COUNT, SUM…)
$s = new student;
$config = array ();
$query = "SELECT id, firstname, lastname, (SELECT COUNT(*) FROM Student) as nb
FROM Student WHERE id < :id" ;
$config[ "sql" ] = $query;
$config[ "bind" ] = array ( "id" ,10);

$s->SelectList( "id_student" , "id" , "firstname" , "lastname" , "nb" ,$config,2);
Rendu HTML