Vous êtes ici :
Accueil Tutoriel Développement web Créer l'architecture de vos projets web en PHP POO grâce à tphpsql

Créer l'architecture de vos projets web en PHP POO grâce à tphpsql

Ce tutoriel a pour but de montrer comment utiliser l'outil en ligne de commande pour générer l'architecture de vos projets web pour les développeurs du monde de POO

C'est quoi tphpsql ?

tphpsql est un petit outil en ligne de commande qui permet de générer le squellette d'un projet en langage PHP orienté objet créé par Tony NGUEREZA..

Pour le moment cet outil est disponible que pour la plateforme linux en particulier ubuntu et débian mais vous pouvez récuperer la source du logiciel depuis le compte du créateur sur http://github.com/nguereza-tony.

Cet outil linux est créé en langage PHP puis compressé sous forme de PHAR (PHP Archive) donc vous devez disposer PHP sur votre système pour que cet outil fonctionne. A l'heure où j'écris ce tutoriel, il existe deux versions de cet outil :

  • la version 1.0.0 est compatible avec PHP 5.3 jusqu'à PHP 5.6 mais pas PHP 7 car il utilise l'extension mysql supprimé depuis PHP 7.
  • la version 2.0.0 est compatible avec PHP 5.3+ et PHP 7 car il est récrit pour utiliser l'extension mysqli qui aussi disponible en PHP 7, avec l'ajout de quelques options tels que la possibilité de specifier le chemin vers un fichier ini qui contient la configuration de certains options.

Notez que chaque branche du dépôt github représente chaque version de l'application

Installation

Pour installer tphpsql vous devez disposer un système linux en particulier ubuntu ou debian. Vous pouvez recuperer la souce depuis le dépôt github si vous avez git installé alors depuis un terminal tapez la commande suivante:

  • pour la version 1.0.0
#git clone https://github.com/nguereza-tony/tphpsql --branch 1.0.0
  • pour la version 2.0.0
#git clone https://github.com/nguereza-tony/tphpsql --branch 2.0.0

Si vous n'avez pas git installé sur votre machine téléchargez la source depuis github à l'adresse suivante https://github.com/nguereza-tony/tphpsql chosissez la branche de votre choix selon la version voulue.

Une fois c'est fait placez vous dans le dossier ou se trouve les sources on part du principe où le dossier reste tphpsql

# cd tphpsql
# cd tphpsql-[version]

remplacez [version] par la version 1.0.0 ou 2.0.0

pour construire le paquet et installer il suffit d'executer le script shell build.sh 

# ./build.sh

NB: vous devez être root pour lancer cet script

A la fin de l'installation on vous demande de configurer l'application c'est-à-dire l'adresse du serveur mysql, nom, utilisateur, mot de passe, port, etc.

Une fois l'installation terminée vous pouvez taper:

# tphpsql --help

Pour obtenir de l'aide.

Utilisation

Ici je montre que la procédure pour la version 2.0.0 pour la version 1.0.0 ce sont les mêmes options par contre certains options tels que --config-file, --tables ne sont pas disponibles

Pour avoir de l'aide il suffit de taper l'une de commande suivante :

# tphpsql
ou
# tphpsql -h
ou
# tphpsql --help

On vous affiche la description de l'application, la version, ainsi que les détails de chaque option

Voici les détails de chaque option :

  • --author

cet option require un argument qui permet de preciser la valeur de tag @author dans les fichiers générés. Par défaut il prend le nom de votre machine (hostname) si vous n'avez pas utilisé cet option. Par exemple:

# tphpsql --author "John Doe"

Notez bien vous devez utiliser cet option en correlation avec l'option --database ou -d.

Cette option est aussi configurable dans le fichier ini de configuration dont la clé est author.

Le resultat est le suivant :

<?php

	/**
	* class for article entity
	*
	* @file Article.php
	* @date 13/04/2017
	* @author John Doe
	*/
  • --config

Pour configurer l'application c'est-à-dire l'adresse du serveur mysql, nom, utilisateur, mot de passe, port, etc.

# tphpsql --config

  • -d, --database

Pour specifier la base de données à utiliser par exemple tapez l'une des commandes suivantes :

# tphpsql -d [database_name]
ou
# tphpsql --database [database_name]

[database_name] est le nom de votre base de données.

  • --config-file

Pour specifier le chemin vers le fichier ini qui contient la configuration de quelques options tels que, auteur, suffix des classes managers, etc. Voici le contenu du fichier exemple livré avec l'application:

;config file used by the app with option --config-file

;the author of the app or file used in the docblock comment for
; tag @author
;example : /**
; *
; * @author [the value]
; */
author = Tony Ulrich NGUEREZA


;the suffix of the every manger class
;
manager_suffix = Man

exemple de l'utilisation :

# tphpsql --config-file /home/tnh/config.ini

Notez bien vous devez utiliser cet option en correlation avec l'option --database ou -d.

Les options utilisés en ligne de commande sont prioritaires sur les options configurés dans le fichier de configuration. Par exemple si vous avez dans le fichier la ligne suivante :

;
;
author = Jonh Doe
;;
;;

et que vous tapez :

# tphpsql --config-file /home/foo/config.ini -d [database_name] --author "Foo Bar"

 alors la valeur de author est Foo bar au lieu de John Doe

  • --tables

pour lister les tables que vous voulez utiliser pour générer les classes, chaque table doit être séparée par un virgule. Par exemple

# tphpsql -d [database_name] --tables table1,table2,...,tableN

Notez bien vous devez utiliser cet option en correlation avec l'option --database ou -d.

Si la table n'existe pas dans la base de données elle sera ignorée.

  • -h, --help

Pour afficher de l'aide ainsi que la description de l'application : auteur, version, date de création, etc.

  • -l, --lib-dir

Pour specifier le nom du dossier ou les classes seront créées par défaut c'est le dossier lib

# tphpsql -l [classes_dir]
ou
# tphpsql --lib-dir [classes_dir]

Notez bien vous devez utiliser cet option en correlation avec l'option --database ou -d.

  • --manager-suffix

Pour specifier le suffix pour les classes managers c'est-à-dire les classes qui gèrent l'ajout, modification, suppression d'une entité. Par défaut c'est Manager

# tphpsql -d [database_name] --manager-suffix Man

Notez bien vous devez utiliser cet option en correlation avec l'option --database ou -d.

Va sufffixer tous les noms de managers par (EntiteMan etc.). Cette option est aussi configurable dans le fichier ini de configuration dont la clé est manager_suffix.

  • --show-db

Pour afficher la liste des base de données disponible pour l'utilisateur mysql configuré dans /etc/tphpsql/tphpsql.conf

# tphpsql --show-db
  • -s, --source-dir

Chemin vers le dossier qui va contenir les sources des fichiers générés par tphpsql. Par défaut c'est un dossier qui porte le nom de la base de données dans le repertoire courant.

# tphpsql -s [destination_dir]
ou
# tphpsql --source-dir [destination_dir]

Notez bien vous devez utiliser cet option en correlation avec l'option --database ou -d.

  • -v, --version

Pour afficher la version, la date de création, l'auteur, etc. de cette application

# tphpsql -v
ou
# tphpsql --version

Affiche par exemple :

 

Exemple d'utilisation complet

Créer une base de données nommée db_tphpsql et une table user. Voici les requetes SQL:

CREATE DATABASE IF NOT EXISTS db_tphpsql;
USE db_tphpsql;

CREATE TABLE IF NOT EXISTS user (
 id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
 username VARCHAR(25) NOT NULL,
 password VARCHAR(255) NOT NULL,
 firstname VARCHAR(100) DEFAULT 'none',
 lastname VARCHAR(200),
 gender VARCHAR(2) DEFAULT 'M'
);

 

Une fois c'est fait on va afficher la liste de la base de données avec la commande tphpsql --show-db. Si la base de données s'affiche dans la liste alors c'est bon on peut continuer, dans le cas contraire verifiez si vous avez le droit sur la base de données.

maintenant on va générer les fichiers sources.

Voici les spécifications :

  • le chemin vers le dossier qui contient tous nos fichiers source se trouve sur /home/your_username/Bureau/tphpsql
  • le nom du dossier qui contient les classes se nomme classes
  • la valeur de l'option --author est John Doe
  • le suffix des classes managers est : M
# tphpsql -d db_tphpsql -l classes -s /home/your_username/Bureau/tphpsql \
--author "John Doe" --manager-suffix M

N'oublié pas le antislashe à la fin de la première ligne et changer your_username par votre nom d'utilisateur

Et vous trouverez dans le dossier /home/your_username/Bureau/tphpsql tous les fichiers générés

 

Voici les exemples de chaque fichier

autoload.php : qui contient la classe permettant de charger automatiquement les classses. C'est le seul fichier à inclure dans vos scripts pour utiliser les classes. Voici son contenu :

<?php
	/**
	* class autoloader bootstrap for all class
	*
	* @file autoload.php
	* @date 13/04/2017
	* @author John Doe
	*/
 class Autoloader{

 /**
 * the autoloader method
 *
 * @param string $className the class to load
 */
 static public function loader($className){
 $filename = "classes/".str_replace("\\", DIRECTORY_SEPARATOR, $className).".php";
 if(file_exists($filename)){
 //require it
 require($filename);
 }
 }
 }

 spl_autoload_register("Autoloader::loader");
?>

 

  • classes/User.php : qui contient la classe User. voici son contenu
<?php

	/**
	* class for user entity
	*
	* @file User.php
	* @date 13/04/2017
	* @author John Doe
	*/
	
	class User{
 
 /**
 * for id attribute
 *
 * @var int
 * @access private
 */
 private $id = null;
	
 /**
 * for username attribute
 *
 * @var string
 * @access private
 */
 private $username = null;
	
 /**
 * for password attribute
 *
 * @var string
 * @access private
 */
 private $password = null;
	
 /**
 * for firstname attribute
 *
 * @var string
 * @access private
 */
 private $firstname = "none";
	
 /**
 * for lastname attribute
 *
 * @var string
 * @access private
 */
 private $lastname = null;
	
 /**
 * for gender attribute
 *
 * @var string
 * @access private
 */
 private $gender = "M";
	
 /**
 * create new User
 *
 * @param array $data the User data
 * @access public
 * @return null
 */
 public function __construct(array $data = array()){
 foreach($data as $key => $value){
 switch($key){
 case "id":
 $this->setId($value);
 break;
 case "username":
 $this->setUsername($value);
 break;
 case "password":
 $this->setPassword($value);
 break;
 case "firstname":
 $this->setFirstname($value);
 break;
 case "lastname":
 $this->setLastname($value);
 break;
 case "gender":
 $this->setGender($value);
 break;
 }
 }
 }
	
 /**
 * get the id value
 *
 * @access public
 * @return int the id value
 */
 public function getId(){
 return $this->id;
 }
	
 /**
 * get the username value
 *
 * @access public
 * @return string the username value
 */
 public function getUsername(){
 return $this->username;
 }
	
 /**
 * get the password value
 *
 * @access public
 * @return string the password value
 */
 public function getPassword(){
 return $this->password;
 }
	
 /**
 * get the firstname value
 *
 * @access public
 * @return string the firstname value
 */
 public function getFirstname(){
 return $this->firstname;
 }
	
 /**
 * get the lastname value
 *
 * @access public
 * @return string the lastname value
 */
 public function getLastname(){
 return $this->lastname;
 }
	
 /**
 * get the gender value
 *
 * @access public
 * @return string the gender value
 */
 public function getGender(){
 return $this->gender;
 }
	
 /**
 * set the new id value
 *
 * @param int $id the new id value to set
 * @access public
 * @return null
 */
 public function setId($id){
 $this->id = $id;
 }
	
 /**
 * set the new username value
 *
 * @param string $username the new username value to set
 * @access public
 * @return null
 */
 public function setUsername($username){
 $this->username = $username;
 }
	
 /**
 * set the new password value
 *
 * @param string $password the new password value to set
 * @access public
 * @return null
 */
 public function setPassword($password){
 $this->password = $password;
 }
	
 /**
 * set the new firstname value
 *
 * @param string $firstname the new firstname value to set
 * @access public
 * @return null
 */
 public function setFirstname($firstname){
 $this->firstname = $firstname;
 }
	
 /**
 * set the new lastname value
 *
 * @param string $lastname the new lastname value to set
 * @access public
 * @return null
 */
 public function setLastname($lastname){
 $this->lastname = $lastname;
 }
	
 /**
 * set the new gender value
 *
 * @param string $gender the new gender value to set
 * @access public
 * @return null
 */
 public function setGender($gender){
 $this->gender = $gender;
 }
	
	}
?>

classes/UserM.php : qui contient la classe manager de User. voici son contenu

<?php

	/**
	* class manager for user entity
	*
	* @file UserM.php
	* @date 13/04/2017
	* @author John Doe
	*/
	
	class UserM{
 
 /**
 * the user table name
 *
 * @const string
 */
 const TABLE = "user";
 
 /**
 * the instance of PDO
 *
 * @var object the PDO instance
 * @access public
 */
 public $pdo = null;
 
 /**
 * construct an manager
 *
 * @param $pdo the PDO instance
 */
 public function __construct(PDO $pdo = null){
 $this->pdo = $pdo;
 }
	
 /**
 * add new user to the database
 *
 * @param object $user
 *
 * @return int
 */
 public function add(User $user){
 return $this->pdo->exec("INSERT INTO ".self::TABLE."(id, username, password, firstname, lastname, gender) VALUES('".$user->getId()."', '".$user->getUsername()."', '".$user->getPassword()."', '".$user->getFirstname()."', '".$user->getLastname()."', '".$user->getGender()."')");
 }
	
 /**
 * update user informations in the database
 *
 * @param object $user
 *
 * @return int
 */
 public function update(User $user){
 return $this->pdo->exec("UPDATE ".self::TABLE." SET username = '".$user->getUsername()."', password = '".$user->getPassword()."', firstname = '".$user->getFirstname()."', lastname = '".$user->getLastname()."', gender = '".$user->getGender()."' WHERE id = '".$user->getId()."'");
 }
 
 /**
 * delete unique user
 *
 * @param mixed $id the user identifier
 *
 * @return int
 */
 public function delete($id = null){
 return $this->pdo->exec("DELETE FROM ".self::TABLE." WHERE id = '".$id."'");
 }
	
 /**
 * verify if the user with id passed in argument exists in the database
 *
 * @param $id the user id to fetch
 * @return int 1 or more if exists 0 or not
 */
 public function exists($id = null){
 $count = 0;
 $return = $this->pdo->query("SELECT COUNT(*) FROM ".self::TABLE." WHERE id = '".$id."'");
 $count = $return->fetchColumn();
 $return->closeCursor();
 return $count;
 }
 
 /**
 * count the number of the user in the database
 *
 * @return int
 */
 public function count(){
 $count = 0;
 $return = $this->pdo->query("SELECT COUNT(*) FROM ".self::TABLE);
 $count = $return->fetchColumn();
 $return->closeCursor();
 return $count;
 }
	
 /**
 * get unique user information store in database
 *
 * @param $id the user identifier to fetch
 * @return object User
 */
 public function get($id = null){
 $data = null;
 $return = $this->pdo->query("SELECT * FROM ".self::TABLE." WHERE id = '".$id."'");
 $data = $return->fetch();
 $return->closeCursor();
 return $data ? new User($data) : new User(array());
 }
	
 /**
 * get the list of the user store in database
 *
 * @param $start the ligne we start to fetch
 * @param $count the number to return. Default 10
 *
 * @return array User
 */
 public function getList($count = 10, $start = 0){
 $query = "SELECT * FROM ".self::TABLE;
 if($start > 0){
 $query .= " LIMIT ".$start." , ".$count;
 }
 else{
 $query .= " LIMIT ".$count;
 }
 $user = array();
 $return = $this->pdo->query($query);
 while($data = $return->fetch()){
 $user[] = new User($data);
 }
 $return->closeCursor();
 return $user;
 }
	
	}
?>

Voilà le petit outil qui vous permettra de générer rapidement le squellette d'un projet web qui utilise le PHP Objet (POO). Si vous avez de soucis à utiliser cet outil merci de me contacter par mail à l'adresse   nguerezatony@gmail.com .

 




Tony NGUEREZA 13 Avr 2017, 12h01

1 Commentaire(s)

  • User image
    Archange TADJIMA

    Tres bon tuto mon grand, et je suis vraiment ravi de ce tuto


    01 Mai 2017, 01h35

Vous n'êtes pas connecter veuillez vous connecter ou créer gratuitement un compte pour poster des commentaires

Vous êtes ici :
Accueil Tutoriel Développement web Créer l'architecture de vos projets web en PHP POO grâce à tphpsql