- [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 2b9fc4c080
commit 7a21d7b32f
6 changed files with 70 additions and 146 deletions

View File

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

View File

@ -49,10 +49,18 @@
$request = \manager\ModuleRequest::fromURL($_POST); $request = \manager\ModuleRequest::fromURL($_POST);
// Si requete correcte // Si requete correcte
if( $request->error == \manager\ManagerError::Success ) if( $request->error == \manager\ManagerError::Success ){
var_dump( $request->dispatch() ); $answer = $request->dispatch();
else $answer->append('ModuleError', false);
echo 'request error';
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 // N'importe -> page d'accueil

View File

@ -29,29 +29,8 @@
* *
*/ */
public function __construct(){ public function __construct(){
$this->data = array();
} $this->error = ManagerError::Success;
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() );
} }
@ -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 * @key<String> Le nom de la valeur a ajouter
* * @value<String> La valeur a ajouter
* @return instance<ModuleRequest> Retourne un objet de type <ModuleRequest>
* *
*/ */
public static function fromString($jsonString){ public function append($key, $value){
$json = json_decode( $jsonString, true ); // Ajoute une entree pour la cle @key et de valeur @value
$this->data[$key] = $value;
// Verification du parsage return $this;
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);
} }
@ -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) * @dataset<Array> Le tableau associatif correspondant a la reponse
*
* @return instance<ModuleRequest> Retourne un objet de type <ModuleRequest>
* *
*/ */
public static function fromURL($post){ public function appendAll($dataset){
/* [1] On verifie que le @path est renseigne // Ajoute une entree pour la cle @key et de valeur @value
=========================================================*/ $this->data = $dataset;
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);
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 json<String> Retourne les donnees serialisees
*
* @return validity<Boolean> Retourne si oui ou non l'objet est correct
* *
*/ */
private function checkPath($path){ public function serialize(){
/* [1] Verification format general
=========================================================*/
if( !preg_match('#^([\w_-]+)/([\w_-]+)$#i', $path, $matches) ){ // Si mauvais format
$this->error = ManagerError::WrongPathType;
return false;
}
// On recupere les donnes de la regex return json_encode($this->data);
$module = $matches[1];
$method = $matches[2];
/* [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) // Attributs prives utiles (initialisation)
private $path; private $path;
private $data; 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(){ public function dispatch(){
/* [1] On verifie qu'aucune erreur n'a ete signalee /* [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 /* [2] On verifie que la methode est amorcable
=========================================================*/ =========================================================*/
if( !is_callable($this->getFunctionCaller()) ){ if( !is_callable($this->getFunctionCaller()) ){
$this->error = ManagerError::UncallableMethod; $this->error = ManagerError::UncallableMethod;
return false; return new ModuleAnswer();
} }
/* [3] On amorce la methode /* [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']; 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(){ 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] Gestion des erreurs
- [x] Explicitation - [x] Explicitation
- [ ] Conception du systeme de delegation des managers - [.] Conception du systeme de delegation des managers
- [x] Module Request - [x] Module Request
- [x] Inline (en php) - [x] Inline (en php)
- [x] Serialise (en json <String>) - [x] Serialise (en json <String>)
- [x] Par url (POST) - [x] Par url (POST)
- [ ] Module Answer - [.] Module Answer
- [x] Conception BDD + ameliorations - [x] Conception BDD + ameliorations
- [x] Liste des tables - [x] Liste des tables