2016-04-18 15 views
1

私はAPI用にSlim v2を使用しており、v3へのアップグレードを考えています。 残念ながら私は経験が限られており、以下のコード例であなたの助けを借りることができます。Slim v2からSlim v3へのアップグレード

これは、ログインコードです:ここで

$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); 
    }); 

はvalidateEmail機能である:

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(); 
} 

}

どのように私は実際に停止するようにスリムv3ではアプリのインスタンスを取得します入力条件が満たされていない場合のアプリですか? 私のコードの助けを借りて私に例を与えることができたら、私はそれを感謝します。

ありがとうございました!

EDIT

上記の問題を解決しました。残念ながら、私のコードをチェックした後に新しい問題が発生しました。

私は、ユーザーを認証するための中間層を持っている:

私のメインのコードで
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(); 
} 

次のように私は機能の認証を実装します。

$app->get('/tasks', 'authenticate', function() { 
     global $user_id; 
     $response = array(); 
     $db = new DbHandler(); 

     //ommit some code 

     echoRespnse(200, $response); 
    }); 

あなたはスリムv3では、これを行う方法を知っていますか? 本当にありがとうございます。

答えて

1

Slim3では、return $response(返信応答オブジェクト)は、アプリを停止するより良い方法です。
どのように下にありますか?

$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機能が以下のように変更されました。

function validateEmail($email) { 

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

ご希望の場合はお手数ですが、

+0

ありがとうございました。これは私が直面していた問題の良い回避策です。 非常に感謝しています。 残念ながら、新しい問題が発生しました。 その問題が解決されたため、上記の質問を編集しました。 – Stefan

+0

slim3ではミドルウェアを使用できます。 Plsは次のリンクを見ています。 http://www.slimframework.com/docs/concepts/middleware.html – wtadahiro

+0

$ requestオブジェクトからヘッダーを取得できます。 '$ request-> getHeaders();' – wtadahiro