[AngularJs + Php-SQL] Astuce : Copier-Coller des CRUDS pour aller plus vite.

angularjsphp_1_logo-mysql-170x170_400x400

Introduction


Dans les applications informatique, le CRUD revient tout le temps.

Il s’agit de faire de la Creation/Lecture/Mise à jour/Suppression.

L’idée est donc de faire du copié-collé d’un crud standard, puis de changer uniquement le nom du modèle de données, en faisant « controle+h » dans notepad, afin d’aller beaucoup plus vite.

Note : Java Hibernate permettrait de faire cela encore plus simplement( méthode comin’ soon ), sans compter les méthodes de création automatiques des POJO, mais ce n’est pas le sujet de ce post … Là on est sur du back end PHP-MYSQL

Un exemple en temps réel dans une App !


Dans mon application RdvJuristes, j’ai un Crud sur les personnes :

http://nicolash.org/rdvj/index.html#/personnes

crd1.jpg

 

Il est évident que je ne vais pas me retaper tout le code pour créer un CRUD sur les juristes :

http://nicolash.org/rdvj/index.html#/juristes

crd2.jpg

On comprends qu’on a affaire à 2 modèles de données relativement similaires, que l’on peut copier-coller, puis, ensuite adapter à notre convenance.

D’abord, on copie-colle la table SQL


Avant d’aller dans Notepad, il faut Copier coller la table SQL des personnes , puis la renommer en juristesExplication :

C’est très facile avec MysqlWorkbench : il faut faire un clic droit sur la table puis « Copy to Clipboard » puis « Create statement ».

glu1

Ensuite on colle le code récupéré, dans une fenêtre d’exécution SQL …

On change seulement ‘personnes’ par ‘juriste’ dans le CREATE, de cette façon, on est sur d’avoir strictement la même table, mais avec un autre nom !

glu2

(Note : Ne pas regarder le typage des colonnes.)

Que faut-il copier-coller dans notepad ++?


Avec AngularJS, on avait déjà notre Factory qui permet de faire du CRUD sur les personnes :

monApp.factory('personnesFactory',function($http){

    var factory = {};

    factory.get_personnes = function(categorie){
        return $http.post('crud.php?action=get_personnes',{'categorie':categorie})
    }

    factory.get_personne_unique = function(idBdd){
        return $http.post('crud.php?action=get_personne_unique',{'id':idBdd})
    }

	factory.insert_personne = function(personne){
        return $http.post('crud.php?action=insert_personne',personne)
    }

	factory.update_personne = function(personne){
        return $http.post('crud.php?action=update_personne',personne)
    }

	factory.get_rdv_personne = function(idBdd){
        return $http.post('crud.php?action=get_rdv_personne',{'id':idBdd})
    }

	return factory
})

On la copie-colle dans notepad, on appuye sur « CTRL »+ »H » sur notre clavier, puis on remplace le mot « personne » (Au singulier) par le mot « juriste » dans toute la factory, d’un seul coup ! Du coup, on se retrouve avec notre nouvelle factory « juristes » strictement identique à la factory « personnes » hormis le nom du modèle de données.

Ensuite, On Copie-Colle notre code back End !!


Voici notre code PHP Back End, qui dialogue avec AngularJs et Mysql

Il s’agit du Crud sur le modèle de données personnes :

<?php

/* -------------------------------------------------BACK END EN PDO------------------------------------------  */

include('connexionConfig.php');

error_reporting(E_ALL ^ E_NOTICE); // important pour ne pas afficher les notice PHP sans cela le script ne marche pas.

/**  Switch Case pour récupérer la l'action demandée par le controleur  Angular **/

switch($_GET['action'])  {

	/* CRUD DU MODELE DE DONNEES PERSONNES */
	case 'get_personnes' 			: get_personnes();
    break;
	case 'get_personne_unique' 		: get_personne_unique();
    break;
	case 'update_personne' 			: update_personne();
    break;
	case 'insert_personne' 			: insert_personne();
    break;
	case 'get_rdv_personne' 		: get_rdv_personne();
    break;

}

/* --------------------------------------------------CRUD DU MODELE DE DONNEES PERSONNES  ------------------------------------------*/

function get_personnes() { 

	/* Récupération des données POST Provenant du Front end*/
    $data = json_decode(file_get_contents("php://input")); 

    try
    {
        $DB = connection();
		 $sql = "SELECT *  from personnes WHERE 1=1";

		 /* Requêtes Imbriquées à la requête de base avec les critères de filtres provenant du front end, on colle des morceaux de requêtes en fonction des critères*/
        if($data->categorie){
            $sql .= " AND categorie='".$data->categorie."'";
        }

		$data = $DB->query($sql);
		$arrAll = $data->fetchAll(PDO::FETCH_ASSOC);

        /* Convertit en JSON  */
        print_r(json_encode($arrAll));
        /* ferme la connexion ? */
        $DB=null;
    }
    catch(PDOException $e)
    {
		print_r(json_encode($e->getMessage()));
        file_put_contents('PDOErreurs.txt', $e->getMessage(), FILE_APPEND);
    }
}

function get_personne_unique() { 

	/* Récupération des données POST Provenant du Front end*/
    $data = json_decode(file_get_contents("php://input")); 

    try
    {
		$DB = connection();

		$requete 		= 'SELECT * from personnes WHERE  id= '.$data->id;
		$data 			= $DB->query($requete);
		$rdv 			= $data->fetch(PDO::FETCH_ASSOC);

		/* Convertit en JSON pour le front end */
		echo(json_encode($rdv)) ;

        /* ferme la connexion ? */
        $DB=null;
    }
    catch(PDOException $e)
    {
		print_r(json_encode($e->getMessage()));
        file_put_contents('PDOErreurs.txt', $e->getMessage(), FILE_APPEND);
    }
}

function update_personne() {
    $data = json_decode(file_get_contents("php://input"));

    /* Update en Bdd avec PDO */
    try {
        $DB = connection();
        $sql = "UPDATE personnes SET nom = :nom,prenom='".$data->prenom."',email='".$data->email."',image='".$data->image."',ville='".$data->ville."',informations = :informations,pp='".$data->pp."',pg='".$data->pg."',humeur='".$data->humeur."',categorie='".$data->categorie."',departement='".$data->departement."',latitude='".$data->latitude."',longitude='".$data->longitude."',place_id='".$data->place_id."',facebook='".$data->facebook."',twitter='".$data->twitter."',qwant='".$data->qwant."' WHERE  id=".$data->id." ";

		$stmt = $DB->prepare($sql);
		$stmt->bindParam(':nom',$data->nom,PDO::PARAM_STR);   // Accepte les quotes
		$stmt->bindParam(':informations',$data->informations,PDO::PARAM_STR); // Accepte les quotes
        $stmt->execute();

        $DB=null;
		print_r(json_encode('Le Back End : Base de donnee mise a jour')); 

    } catch (PDOException $e) {
		file_put_contents('PDOErreurs.txt', $e->getMessage(), FILE_APPEND);
		print_r(json_encode($e->getMessage()));
        die();
    }
}

function insert_personne() {
    /* Récupération des données POST Provenant du Front end*/
     $data = json_decode(file_get_contents("php://input")); 

	/* Insertion du rendez vous en Bdd avec PDO */
    try {

        $DB = connection();

		$req = $DB->prepare("INSERT INTO personnes VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
		$req->bindParam(1,$data->title,PDO::PARAM_STR); // Permet daccepter les quotes
		$req->bindParam(2,$data->infos,PDO::PARAM_STR); // Permet daccepter les quotes
		$req->bindParam(9,$data->document,PDO::PARAM_STR); // Permet daccepter les quotes

        $req->execute(array(null,$data->nom,$data->prenom,$data->email,$data->image,$data->ville,$data->informations,$data->pp,$data->pg,$data->humeur,$data->categorie,$data->departement,$data->latitude,$data->longitude,$data->place_id,$data->facebook,$data->qwant,$data->twitter));

		/* print_r(json_encode($lastid));  */
		print_r(json_encode('Le Back End : Base de donnee mise a jour'));
		$DB=null;

    } catch (PDOException $e) {
		print_r(json_encode($e->getMessage()));
        file_put_contents('PDOErreurs.txt', $e->getMessage(), FILE_APPEND);
        die();
    }
}

function get_rdv_personne(){ 

	$data = json_decode(file_get_contents("php://input"));

	try
    {
		$DB = connection();

		$requete 		= 'SELECT * FROM  personnesrendezvous LEFT JOIN rendezvous ON personnesrendezvous.idrendezvous = rendezvous.id WHERE personnesrendezvous.idpersonne = '.$data->id;
		$data 			= $DB->query($requete);
		$jrst 			= $data->fetchAll(PDO::FETCH_ASSOC);

		echo(json_encode($jrst)) ;

        $DB=null;
    }
    catch(PDOException $e)
    {
		print_r(json_encode($e->getMessage()));
        file_put_contents('PDOErreurs.txt', $e->getMessage(), FILE_APPEND);
    }
}

On copie-colle notre CRUD dans notepad, on appuye sur « CTRL »+ »H » puis on remplace le mot « personne » par le mot « juriste » dans tout NOTRE CRUD !

Cela nous donne cela : (Extrait )

<?php

/* -------------------------------------------------BACK END EN PDO------------------------------------------  */

include('connexionConfig.php');

error_reporting(E_ALL ^ E_NOTICE); // important pour ne pas afficher les notice PHP sans cela le script ne marche pas.

/**  Switch Case pour récupérer la l'action demandée par le controleur  Angular **/

switch($_GET['action'])  {

	/* CRUD DU MODELE DE DONNEES JURISTES */
	case 'get_juristes' 			: get_juristes();
    break;
	case 'get_juriste_unique' 		: get_juriste_unique();
    break;
	case 'update_juriste' 			: update_juriste();
    break;
	case 'insert_juriste' 			: insert_juriste();
    break;
	case 'get_rdv_juriste' 			: get_rdv_juriste();
    break;

}

/* --------------------------------------------------CRUD DU MODELE DE DONNEES JURISTES  ------------------------------------------*/

function get_juristes() { 

	/* Récupération des données POST Provenant du Front end*/
    $data = json_decode(file_get_contents("php://input")); 

    try
    {
        $DB = connection();
		 $sql = "SELECT *  from juristes WHERE 1=1";

		 /* Requêtes Imbriquées à la requête de base avec les critères de filtres provenant du front end, on colle des morceaux de requêtes en fonction des critères*/
        if($data->categorie){
            $sql .= " AND categorie='".$data->categorie."'";
        }

		$data = $DB->query($sql);
		$arrAll = $data->fetchAll(PDO::FETCH_ASSOC);

        /* Convertit en JSON  */
        print_r(json_encode($arrAll));
        /* ferme la connexion ? */
        $DB=null;
    }
    catch(PDOException $e)
    {
		print_r(json_encode($e->getMessage()));
        file_put_contents('PDOErreurs.txt', $e->getMessage(), FILE_APPEND);
    }
}

function get_juriste_unique() { 

	/* Récupération des données POST Provenant du Front end*/
    $data = json_decode(file_get_contents("php://input")); 

    try
    {
		$DB = connection();

		$requete 		= 'SELECT * from juristes WHERE  id= '.$data->id;
		$data 			= $DB->query($requete);
		$rdv 			= $data->fetch(PDO::FETCH_ASSOC);

		/* Convertit en JSON pour le front end */
		echo(json_encode($rdv)) ;

        /* ferme la connexion ? */
        $DB=null;
    }
    catch(PDOException $e)
    {
		print_r(json_encode($e->getMessage()));
        file_put_contents('PDOErreurs.txt', $e->getMessage(), FILE_APPEND);
    }
}

function update_juriste() {
    $data = json_decode(file_get_contents("php://input"));

    /* Update en Bdd avec PDO */
    try {
        $DB = connection();
        $sql = "UPDATE juristes SET nom = :nom,prenom='".$data->prenom."',email='".$data->email."',image='".$data->image."',ville='".$data->ville."',informations = :informations,pp='".$data->pp."',pg='".$data->pg."',humeur='".$data->humeur."',categorie='".$data->categorie."',departement='".$data->departement."',latitude='".$data->latitude."',longitude='".$data->longitude."',place_id='".$data->place_id."',facebook='".$data->facebook."',twitter='".$data->twitter."',qwant='".$data->qwant."' WHERE  id=".$data->id." ";

		$stmt = $DB->prepare($sql);
		$stmt->bindParam(':nom',$data->nom,PDO::PARAM_STR);   // Accepte les quotes
		$stmt->bindParam(':informations',$data->informations,PDO::PARAM_STR); // Accepte les quotes
        $stmt->execute();

        $DB=null;
		print_r(json_encode('Le Back End : Base de donnee mise a jour')); 

    } catch (PDOException $e) {
		file_put_contents('PDOErreurs.txt', $e->getMessage(), FILE_APPEND);
		print_r(json_encode($e->getMessage()));
        die();
    }
}

function insert_juriste() {
    /* Récupération des données POST Provenant du Front end*/
     $data = json_decode(file_get_contents("php://input")); 

	/* Insertion du rendez vous en Bdd avec PDO */
    try {

        $DB = connection();

		$req = $DB->prepare("INSERT INTO juristes VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
		$req->bindParam(1,$data->title,PDO::PARAM_STR); // Permet daccepter les quotes
		$req->bindParam(2,$data->infos,PDO::PARAM_STR); // Permet daccepter les quotes
		$req->bindParam(9,$data->document,PDO::PARAM_STR); // Permet daccepter les quotes

        $req->execute(array(null,$data->nom,$data->prenom,$data->email,$data->image,$data->ville,$data->informations,$data->pp,$data->pg,$data->humeur,$data->categorie,$data->departement,$data->latitude,$data->longitude,$data->place_id,$data->facebook,$data->qwant,$data->twitter));

		/* print_r(json_encode($lastid));  */
		print_r(json_encode('Le Back End : Base de donnee mise a jour'));
		$DB=null;

    } catch (PDOException $e) {
		print_r(json_encode($e->getMessage()));
        file_put_contents('PDOErreurs.txt', $e->getMessage(), FILE_APPEND);
        die();
    }
}

function get_rdv_juriste(){ 

	$data = json_decode(file_get_contents("php://input"));

	try
    {
		$DB = connection();

		$requete 		= 'SELECT * FROM  juristesrendezvous LEFT JOIN rendezvous ON juristesrendezvous.idrendezvous = rendezvous.id WHERE juristesrendezvous.idjuriste = '.$data->id;
		$data 			= $DB->query($requete);
		$jrst 			= $data->fetchAll(PDO::FETCH_ASSOC);

		echo(json_encode($jrst)) ;

        $DB=null;
    }
    catch(PDOException $e)
    {
		print_r(json_encode($e->getMessage()));
        file_put_contents('PDOErreurs.txt', $e->getMessage(), FILE_APPEND);
    }
}

12551Ouah ! Mais c’est exactement pareil, gars ! Ca ressemble grave ! On croirait un design pattern !

Ben oui, c’est le but ! C’est seulement après que l’on dérivera nos crud distinctifs ! Pour l’instant on a fait du copié collé en 5 minutes, jo , et on est content ! Et pour le Design Pattern, ben oui, je crois qu’on peut dire que c’en est un, parce que c’est duplicable et standardisé.
Et dieu seul sait ce que ce design pattern, élaboré par un Indien est diaboliquement structuré simple et puissant ! Difficile de s’en passer à l’avenir , ça fracasse, la clarté de PHP PDO et la simplicité d’AngularJs associés, ourgh , le 2 ways binding, toujours aussi bien malgré les critiques, les flux JSON faciles à débugger dans la console firefox en cliquant sur F12 ! Y’a pas à dire c’est le toooop moumouuute !.

animals-goatMais il reste encore d’autres choses à faire non ?

Ben oui, il faut encore copier-coller le controleur ANGULARJS  et la vue HTML des personnes, toujours en faisant la même chose, jo, « CTRL »+ »H » puis substituer « personnes » par « juristes » !

Malin non ?

Conclusion


Avec cette méthode, on copie-colle nos CRUD, ce qui permet d’avoir un résultat plus fiable au final, et surtout, c’est plus rapide et normalisé.

Le plus, c’est qu’on conserve tout le look de notre vue HTML, la seule chose qui change est le modèle de données !

Publicités