Gestion du @path dans l'url pour 'ModuleRequest' de la forme : host.io/api/moduleName/methodName/?

This commit is contained in:
xdrm-brackets 2016-06-03 10:06:47 +02:00
parent 07d608fdaf
commit 629e088588
3 changed files with 19 additions and 38 deletions

View File

@ -98,8 +98,8 @@
// Api // Api
$R->post('api.+', function(){ $R->post('api(?:/(.*))?', function($url){
$request = ModuleRequest::fromPost($_POST); $request = ModuleRequest::fromPost($url, $_POST);
$answer = $request->dispatch(); $answer = $request->dispatch();
echo $answer->serialize(); echo $answer->serialize();

View File

@ -252,49 +252,15 @@
} }
/* DESERIALISATION ET CREATION D'UN OBJET
*
* @jsonString<String> Json au format string contenant les donnees
*
* @return instance<ModuleRequest> Retourne un objet de type <ModuleRequest>
*
*/
public static function fromString($jsonString){
$json = json_decode( $jsonString, true );
// Verification du parsage
if( $json == null )
return new ModuleRequest();
// Verification des parametres
if( !isset($json['path']) )
return new ModuleRequest();
// On definit $params au cas ou il soit vide
$params = $json;
// On retire le @path de @params
unset($params['path']);
return new ModuleRequest($json['path'], $params);
}
/* DESERIALISATION A PARTIR DES DONNEES POST /* DESERIALISATION A PARTIR DES DONNEES POST
* *
* @url<String> Contenu de l'url après api/ (si existe)
* @post<Array> Tableau des donnes $_POST => @path + @data (opt) * @post<Array> Tableau des donnes $_POST => @path + @data (opt)
* *
* @return instance<ModuleRequest> Retourne un objet de type <ModuleRequest> * @return instance<ModuleRequest> Retourne un objet de type <ModuleRequest>
* *
*/ */
public static function fromPost($post){ public static function fromPost($url, $post){
/* [0] Verification de l'authentification /* [0] Verification de l'authentification
=========================================================*/ =========================================================*/
// On definit le token // On definit le token
@ -303,9 +269,19 @@
/* [1] On verifie que le @path est renseigne /* [1] On verifie que le @path est renseigne
=========================================================*/ =========================================================*/
/* (1) Si le path est dans @url */
$pathInUrl = strlen($url[0]) > 0 && preg_match('#^([\w_-]+)/([\w_-]+)/?$#', $url[0], $urlMatches);
// On l'utilise pour le chemin
if( $pathInUrl )
$post['path'] = $urlMatches[1].'/'.$urlMatches[2];
/* (2) On vérifie dans tous les cas si le path existe */
if( !isset($post['path']) ) if( !isset($post['path']) )
return new ModuleRequest(); return new ModuleRequest();
/* [2] On verifie que @data est renseigne /* [2] On verifie que @data est renseigne
=========================================================*/ =========================================================*/
// Si variable n'existe pas, on cree un tableau vide // Si variable n'existe pas, on cree un tableau vide
@ -314,6 +290,8 @@
// On retire le @path de @params // On retire le @path de @params
unset($params['path']); unset($params['path']);
/* [3] On met les paramètres JSON en JSON (si ils décodent sans erreur) /* [3] On met les paramètres JSON en JSON (si ils décodent sans erreur)
=========================================================*/ =========================================================*/
foreach($params as $name=>$value){ foreach($params as $name=>$value){

View File

@ -139,6 +139,9 @@
// Code Http // Code Http
ManagerError::setHttpCode($this->error); ManagerError::setHttpCode($this->error);
// Type de contenu
// header('Content-Type: application/json');
// On rajoute l'erreur au message // On rajoute l'erreur au message
$returnData = array_merge( $returnData = array_merge(
array( array(