2016-04-18 14 views
1

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.

Antwort

1

In Slim3, return $response (return Response-Objekt) ist eine bessere Art und Weise App zu stoppen.
So ist, wie die unten?

$app->post('/register', function($request, $response, $args) { 
    // omit some codes 
    if(!validateEmail($request->getParsedBodyParam('email'))){ 
     return $response->withJson(['message' => 'Email address is not valid', 'error' => true], 400); 
    } 
    // omit some codes 
} 

validateEmail-Funktion wird wie unten geändert.

function validateEmail($email) { 

    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
     return false 
    } 
    return true; 
} 

Hoffe, dass es Ihnen helfen.

+0

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

+0

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

+0

Und Sie können Header von $ Request-Objekt erhalten. '$ request-> getHeaders();' – wtadahiro