您是我对苗条框架及其基础知识的新手,我发现了许多基于v2的rest apis示例(http://www.androidhive.info/2014/01/how-to-create-rest-api-for-android-app-using-php-slim-and-mysql-day-12-2/)I非常喜欢v2的代码分区和方法,但我可以不更新到v3 任何人都可以帮助我
\Slim\Slim::registerAutoloader();
$app = new \Slim\Slim();
// ID utilisateur - variable globale
$user_id = NULL;
/**
* Ajout de Couche intermédiaire pour authentifier chaque demande
* Vérifier si la demande a clé API valide dans l'en-tête "Authorization"
*/
function authenticate(\Slim\Route $route) {
// Obtenir les en-têtes de requêtes
$headers = apache_request_headers();
$response = array();
$app = \Slim\Slim::getInstance();
// Vérification de l'en-tête d'autorisation
if (isset($headers['Authorization'])) {
$db = new DbHandler();
// Obtenir la clé d'api
$api_key = $headers['Authorization'];
// Valider la clé API
if (!$db->isValidApiKey($api_key)) {
// Clé API n'est pas présente dans la table des utilisateurs
$response["error"] = true;
$response["message"] = "Accès Refusé. Clé API invalide";
echoRespnse(401, $response);
$app->stop();
} else {
global $user_id;
// Obtenir l'ID utilisateur (clé primaire)
$user_id = $db->getUserId($api_key);
}
} else {
// Clé API est absente dans la en-tête
$response["error"] = true;
$response["message"] = "Clé API est manquante";
echoRespnse(400, $response);
$app->stop();
}
}
/**
* ----------- MÉTHODES sans authentification---------------------------------
*/
/**
* Enregistrement de l'utilisateur
* url - /register
* methode - POST
* params - name, email, password
*/
$app->post('/register', function() use ($app) {
// vérifier les paramètres requises
verifyRequiredParams(array('name', 'email', 'password'));
$response = array();
// lecture des params de post
$name = $app->request->post('name');
$email = $app->request->post('email');
$password = $app->request->post('password');
// valider adresse email
validateEmail($email);
$db = new DbHandler();
$res = $db->createUser($name, $email, $password);
if ($res == USER_CREATED_SUCCESSFULLY) {
$response["error"] = false;
$response["message"] = "Vous êtes inscrit avec succès";
} else if ($res == USER_CREATE_FAILED) {
$response["error"] = true;
$response["message"] = "Oops! Une erreur est survenue lors de l'inscription";
} else if ($res == USER_ALREADY_EXISTED) {
$response["error"] = true;
$response["message"] = "Désolé, cet E-mail éxiste déja";
}
// echo de la repense JSON
echoRespnse(201, $response);
});
function verifyRequiredParams($required_fields) {
$error = false;
$error_fields = "";
$request_params = array();
$request_params = $_REQUEST;
// Manipulation paramsde la demande PUT
if ($_SERVER['REQUEST_METHOD'] == 'PUT') {
$app = \Slim\Slim::getInstance();
parse_str($app->request()->getBody(), $request_params);
}
foreach ($required_fields as $field) {
if (!isset($request_params[$field]) || strlen(trim($request_params[$field])) <= 0) {
$error = true;
$error_fields .= $field . ', ';
}
}
if ($error) {
//Champ (s) requis sont manquants ou vides
// echo erreur JSON et d'arrêter l'application
$response = array();
$app = \Slim\Slim::getInstance();
$response["error"] = true;
$response["message"] = 'Champ(s) requis ' . substr($error_fields, 0, -2) . ' est (sont) manquant(s) ou vide(s)';
echoRespnse(400, $response);
$app->stop();
}
}
/**
* Validation adresse e-mail
*/
function validateEmail($email) {
$app = \Slim\Slim::getInstance();
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$response["error"] = true;
$response["message"] = "Adresse e-mail n'est pas valide";
echoRespnse(400, $response);
$app->stop();
}
}
/**
* Faisant écho à la réponse JSON au client
* @param String $status_code Code de réponse HTTP
* @param Int $response response Json
*/
function echoRespnse($status_code, $response) {
$app = \Slim\Slim::getInstance();
// Code de réponse HTTP
$app->status($status_code);
// la mise en réponse type de contenu en JSON
$app->contentType('application/json');
echo utf8_encode(json_encode($response));
}
$app->run();
答案 0 :(得分:0)
require '../libs/vendor/autoload.php';
$app = new Slim\App( [
'settings' => [
'addContentLengthHeader' => false
]
]);
$verifyRequiredParams = function ($request, $response, $next) {
$route = $request->getAttribute('route');
$validators = $route->getArgument('validators');
$error = false;
$error_fields = "";
$request_params = array();
$request_params = $_REQUEST;
// Manipulation paramsde la demande PUT
if ($_SERVER['REQUEST_METHOD'] == 'PUT') {
parse_str($request->getBody(), $request_params);
}
foreach ($validators as $field) {
if (!isset($request_params[$field]) || strlen(trim($request_params[$field])) <= 0) {
$error = true;
$error_fields .= $field . ', ';
}
}
if ($error) {
//Champ (s) requis sont manquants ou vides
// echo erreur JSON et d'arrêter l'application
$resp=array();
$resp['error']=true;
$resp["message"] = 'Champ(s) requis ' . substr($error_fields, 0, -2) . ' est (sont) manquant(s) ou vide(s)';
$response= $response->withJson($resp, 400);
}else{ $response = $next($request, $response);}
return $response;
};
$authenticate=function($request, $response, $next) {
// Obtenir les en-têtes de requêtes
$headers = apache_request_headers();
$resp = array();
// Vérification de l'en-tête d'autorisation
if (isset($headers['Authorization'])) {
$db = new DbHandler();
// Obtenir la clé d'api
$api_key = $headers['Authorization'];
// Valider la clé API
if (!$db->isValidApiKey($api_key)) {
// Clé API n'est pas présente dans la table des utilisateurs
$resp["error"] = true;
$resp["message"] = "Accès Refusé. Clé API invalide";
$response=$response->withJson($resp, 401);
} else {
global $user_id;
// Obtenir l'ID utilisateur (clé primaire)
$user_id = $db->getUserId($api_key);
$response=$response = $next($request, $response);
}
} else {
// Clé API est absente dans la en-tête
$resp["error"] = true;
$resp["message"] = "Clé API est manquante";
$response=$response->withJson($resp, 400);
}
return$response;
};
$app->post('/task', function ($request, $response, $args) {
$resp = array();
$task = $request->getParsedBody()['task'];
global $user_id;
$db = new DbHandler();
//Création d'une nouvelle tâche
$task_id = $db->createTask($user_id, $task);
if ($task_id != NULL) {
$resp["error"] = false;
$resp["message"] = "Tâche créé avec succès";
$resp["task_id"] = $task_id;
$response=$response->withJson($resp, 201);
} else {
$resp["error"] = true;
$resp["message"] = "Impossible de créer la tâche. S'il vous plaît essayer à nouveau";
$response=$response->withJson($resp, 200);
}
return $response;
})->setArguments(['validators' => ['task']])->add($verifyRequiredParams)->add($authenticate);
$app->run();