Ich habe für meine APIs Schlanke v2 benutze und denke an v3 über das Upgrade. Leider habe ich begrenzte Erfahrung und könnte Ihre Hilfe für ein Codebeispiel unten verwenden.Schlanke v2 Slim v3-Upgrade
Dies ist der Login-Code:
$app->post('/register', function() use ($app) {
// check for required params
verifyRequiredParams(array('name', 'email', 'password'));
$response = array();
// reading post params
$name = $app->request->post('name');
$email = $app->request->post('email');
$password = $app->request->post('password');
// validating email address
validateEmail($email);
$db = new DbHandler();
$res = $db->createUser($name, $email, $password);
if ($res == USER_CREATED_SUCCESSFULLY) {
$response["error"] = false;
$response["message"] = "You are successfully registered";
} else if ($res == USER_CREATE_FAILED) {
$response["error"] = true;
$response["message"] = "Oops! An error occurred while registereing";
} else if ($res == USER_ALREADY_EXISTED) {
$response["error"] = true;
$response["message"] = "Sorry, this email already existed";
}
// echo json response
echoRespnse(201, $response);
});
Hier ist die validateEmail Funktion:
function validateEmail($email) {
$app = \Slim\Slim::getInstance();
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$response["error"] = true;
$response["message"] = 'Email address is not valid';
echoRespnse(400, $response);
$app->stop();
}
}
Wie kann ich eine Instanz der App in Schlanke v3 erhalten die tatsächlich zu stoppen App, wenn Eingabekriterien nicht erfüllt sind? Ich würde es begrüßen, wenn Sie mir ein Beispiel mit Hilfe von meinem Code geben könnten.
Danke für die Hilfe!
EDIT
Das obige Problem gelöst wurde. Leider trat nach dem Überprüfen meines Codes ein neues Problem auf.
Ich habe eine mittlere Schicht die Benutzer zu authentifizieren:
function authenticate(\Slim\Route $route) {
// Getting request headers
$headers = apache_request_headers();
$response = array();
$app = \Slim\Slim::getInstance();
// Verifying Authorization Header
if (isset($headers['Authorization'])) {
//omitted code
} else {
// api key is missing in header
$response["error"] = true;
$response["message"] = "Api key is misssing";
echoRespnse(400, $response);
$app->stop();
}
In meinem Haupt-Code i Funktion implementieren authentifiziert wie folgt:
$app->get('/tasks', 'authenticate', function() {
global $user_id;
$response = array();
$db = new DbHandler();
//ommit some code
echoRespnse(200, $response);
});
Möchten Sie wissen, wie diese in dünner v3 zu tun? Ich würde deine Hilfe wirklich schätzen.
Vielen Dank für Ihre Antwort. Dies ist eine gute Problemumgehung für das Problem, mit dem ich konfrontiert war. Sehr geschätzt. Leider ist ein neues Problem aufgetreten. Ich habe die obige Frage bearbeitet, weil das Problem gelöst wurde. – Stefan
In slim3 können Sie Middleware verwenden. Bitte werfen Sie einen Blick auf den folgenden Link. http://www.slimframework.com/docs/concepts/middleware.html – wtadahiro
Und Sie können Header von $ Request-Objekt erhalten. '$ request-> getHeaders();' – wtadahiro