- [x] Gestion des erreurs

- [x] Explicitation
- [.] Conception du systeme de delegation des managers
	- [x] Module Request
		- [x] Inline (en php)
		- [x] Serialise (en json <String>)
		- [x] Par url (POST)
	- [.] Module Answer
This commit is contained in:
xdrm-brackets 2016-02-05 00:07:03 +01:00
parent 7b460332f2
commit 932b0ae0b3
6 changed files with 70 additions and 146 deletions

View File

@ -74,14 +74,14 @@
// Creation de la requete
$requete = new manager\ModuleRequest('firstModule/getUsers');
$answer = $requete->dispatch();
var_dump( $requete->dispatch() );
var_dump( $answer->serialize() );
// var_dump($requete->error);
return true;
}//selectUsers();
}selectUsers();
@ -99,14 +99,19 @@
function displayUsers(){
// Creation de la requete
$requete = new \manager\ModuleRequest('firstModule/getUsers');
$users = $requete->dispatch();
$request = new \manager\ModuleRequest('firstModule/getUsers');
// Debug error
var_dump( $request->error );
var_dump( \manager\ManagerError::explicit($request->error) );
$users = $request->dispatch();
return true;
}displayUsers();
}//displayUsers();

View File

@ -49,10 +49,18 @@
$request = \manager\ModuleRequest::fromURL($_POST);
// Si requete correcte
if( $request->error == \manager\ManagerError::Success )
var_dump( $request->dispatch() );
else
echo 'request error';
if( $request->error == \manager\ManagerError::Success ){
$answer = $request->dispatch();
$answer->append('ModuleError', false);
echo $answer->serialize(); // On renvoie la reponse
// Si requete erronee
}else{
$answer = new \manager\ModuleAnswer();
$answer->append('ModuleError', true);
echo $answer->serialize();
}
});
// N'importe -> page d'accueil

View File

@ -29,29 +29,8 @@
*
*/
public function __construct(){
}
public function dispatch(){
/* [1] On verifie qu'aucune erreur n'a ete signalee
=========================================================*/
if( $this->error != ManagerError::Success ) return false;
/* [2] On verifie que la methode est amorcable
=========================================================*/
if( !is_callable($this->getFunctionCaller()) ){
$this->error = ManagerError::UncallableMethod;
return false;
}
/* [3] On amorce la methode
=========================================================*/
return call_user_func_array( $this->getFunctionCaller(), $this->getData() );
$this->data = array();
$this->error = ManagerError::Success;
}
@ -59,28 +38,18 @@
/* DESERIALISATION ET CREATION D'UN OBJET
/* AJOUTE UNE DONNEE A LA REPONSE
*
* @jsonString<String> Json au format string contenant les donnees
*
* @return instance<ModuleRequest> Retourne un objet de type <ModuleRequest>
* @key<String> Le nom de la valeur a ajouter
* @value<String> La valeur a ajouter
*
*/
public static function fromString($jsonString){
$json = json_decode( $jsonString, true );
public function append($key, $value){
// Ajoute une entree pour la cle @key et de valeur @value
$this->data[$key] = $value;
// Verification du parsage
if( $json == null )
return new ModuleRequest();
// Verification des parametres
if( !isset($json['path']) )
return new ModuleRequest();
// On definit $data au cas ou il soit vide
$data = (isset($json['data'])) ? $json['data'] : array();
return new ModuleRequest($json['path'], $data);
return $this;
}
@ -88,28 +57,18 @@
/* DESERIALISATION A PARTIR DES DONNEES POST
/* AJOUTE TOUTES LES DONNEES A LA REPONSE
*
* @post<Array> Tableau des donnes $_POST => @path + @data (opt)
*
* @return instance<ModuleRequest> Retourne un objet de type <ModuleRequest>
* @dataset<Array> Le tableau associatif correspondant a la reponse
*
*/
public static function fromURL($post){
/* [1] On verifie que le @path est renseigne
=========================================================*/
if( !isset($post['path']) )
return new ModuleRequest();
/* [2] On verifie que @data est renseigne
=========================================================*/
$data = (isset($post['data'])) ? $post['data'] : array();
/* [3] On retourne une instance de <ModuleRequest>
=========================================================*/
return new ModuleRequest($post['path'], $data);
public function appendAll($dataset){
// Ajoute une entree pour la cle @key et de valeur @value
$this->data = $dataset;
return $this;
}
@ -117,71 +76,15 @@
/* VERIFICATION DU FORMAT ET DE LA COHERENCE DU CHEMIN SPECIFIE
/* SERIALISATION A PARTIR DES DONNEES
*
* @path<String> String correspondant au chemin de delegation ("module/methode")
*
* @return validity<Boolean> Retourne si oui ou non l'objet est correct
* @return json<String> Retourne les donnees serialisees
*
*/
private function checkPath($path){
/* [1] Verification format general
=========================================================*/
if( !preg_match('#^([\w_-]+)/([\w_-]+)$#i', $path, $matches) ){ // Si mauvais format
$this->error = ManagerError::WrongPathType;
return false;
}
public function serialize(){
// On recupere les donnes de la regex
$module = $matches[1];
$method = $matches[2];
return json_encode($this->data);
/* [2] Verification de l'existence du module (conf)
=========================================================*/
if( !array_key_exists($module, $this->modules) ){ // Si le module n'est pas specifie dans la conf
$this->error = ManagerError::UnknownModule;
return false; // On retourne FALSE, si erreur
}
/* [3] Verification de l'existence de la methode (conf)
=========================================================*/
if( array_search($method, $this->modules[$module]) === false ){ // Si la methode n'est pas specifie dans la conf
$this->error = ManagerError::UnknownMethod;
return false; // On retourne FALSE, si erreur
}
/* [4] Enregistrement du chemin et renvoi de SUCCESS
=========================================================*/
$this->path = array(
'module' => $module,
'method' => $method
);
return true;
}
/* RENVOI LE CHEMIN D'AMORCAGE DE LA METHODE
*
* @return path<Array> Retourne le chemin d'amorcage de la requete
*
*/
private function getFunctionCaller(){
return '\\manager\\module\\'.$this->path['module'].'::'.$this->path['method'];
}
/* RENVOI LES DONNEES
*
* @return data<Array> Retourne les donnees de la requete
*
*/
private function getData(){
return $this->data;
}

View File

@ -23,8 +23,12 @@
// Attributs prives utiles (initialisation)
private $path;
private $data;
public $error;
// Contiendra la reponse a la requete
public $answer;
// Contiendra l'etat de la requete
public $error;
@ -88,24 +92,36 @@
/* EXECUTE LE TRAITEMENT ASSOCIE ET REMPLIE LA REPONSE
*
* @return answer<ModuleAnswer> Retourne une reponse de type <ModuleAnswer> si tout s'est bien passe
*
*/
public function dispatch(){
/* [1] On verifie qu'aucune erreur n'a ete signalee
=========================================================*/
if( $this->error != ManagerError::Success ) return false;
if( $this->error != ManagerError::Success ) return new ModuleAnswer();
/* [2] On verifie que la methode est amorcable
=========================================================*/
if( !is_callable($this->getFunctionCaller()) ){
$this->error = ManagerError::UncallableMethod;
return false;
return new ModuleAnswer();
}
/* [3] On amorce la methode
=========================================================*/
return call_user_func_array( $this->getFunctionCaller(), $this->getData() );
$returned = call_user_func_array( $this->getFunctionCaller(), $this->data );
/* [4] Gestion de la reponse
=========================================================*/
$answer = new ModuleAnswer();
$answer->appendAll($returned);
return $answer;
}
@ -229,16 +245,6 @@
return '\\manager\\module\\'.$this->path['module'].'::'.$this->path['method'];
}
/* RENVOI LES DONNEES
*
* @return data<Array> Retourne les donnees de la requete
*
*/
private function getData(){
return $this->data;
}
}

View File

@ -6,7 +6,9 @@
public static function getAll(){
return \manager\Database::getPDO()->query("SELECT * FROM user ORDER BY id_user")->fetchAll();
return array(
'users' => \manager\Database::getPDO()->query("SELECT * FROM user ORDER BY id_user")->fetchAll()
);
}

View File

@ -15,12 +15,12 @@
############
- [x] Gestion des erreurs
- [x] Explicitation
- [ ] Conception du systeme de delegation des managers
- [.] Conception du systeme de delegation des managers
- [x] Module Request
- [x] Inline (en php)
- [x] Serialise (en json <String>)
- [x] Par url (POST)
- [ ] Module Answer
- [.] Module Answer
- [x] Conception BDD + ameliorations
- [x] Liste des tables