2016-09-12 6 views
-1

私はチュートリアルの後にスリムフレームワークを初めて利用しています。私はAPIに投稿データを取得できました。しかし、JSONとしてデータを送信しようとするとエラーが出ます。JSONリクエストを必須フィールド(複数可)の名前、電子メール、パスワードが欠落しているか、空などthis.i誤差が出achiveする正しい構文が何であるかを以下のスリムフレームワークでJSON入力を読む

$app->post('/login', function() use ($app) { 
       // check for required params 
       $json = $app->request->getBody(); 
       $data = json_decode($json, true); 
       verifyRequiredParams(array('name','email', 'password')); 

私はから私のAPIのPOSTリクエストからJSONデータを取得する方法JSON配列要求コ場合

{ 
"name":"usertest", 
"email":"[email protected]", 
"password":"xxxxxx" 
} 

iはverifyRequiredParams(array('name','email', 'password'));$name = $app->request->post('name');を使用することができますようにJSONとしての私。

+0

あなたはJSONに配列を変換したいわけ? – rbr94

+0

申し訳ありません私は間違ったterms.myの関心事を使用している場合、$ email = $ app-> request-> post( 'email')のように、ポストメソッドのデータのJSON配列を読み込む方法は同じですか?私はパラメータを確認しようとするとエラーが来ていると思います。私は質問のサンプル投稿配列を追加します。 –

+0

私は解決策を追加しました。問題が解決しない場合は、 '$ data'の内容(例えば' print_r($ data); ')を投稿してください – rbr94

答えて

2

リクエストデータを読むには、$dataプロパティを使用できます。

$name = $data->name; 
$email = $data->email; 

EDIT:代わりに連想配列の対象とするためにJSONデータを変換する代わりに$data = json_decode($json, true)

使用$data = json_decode($json)あなたはこのようにそれを使用することができますので、それはオブジェクトでなければなりません。

0

問題は私のverifyRequiredParams機能を私がthink.iに置くことで問題があった場合には、次のコードから問題を修正しました。

$app->post('/login', function() use ($app) { 
      if($app->request->headers->get('Content-Type')=='application/json'){ 
       $json = $app->request->getBody(); 
       verifyRequiredParamsjson(array('email','password'),$json); 
       $data = json_decode($json); 

       // check for required params        

       $email = $data->email; 
       $password = $data->password; 
      } 
      else{ 
       // check for required params 
       verifyRequiredParams(array('email', 'password')); 
       // reading post params 
       $email = $app->request->post('email'); 
       $password = $app->request->post('password'); 
      } 

      $response = array(); 

      $db = new DbHandler(); 
      // check for correct email and password 
      if ($db->checkLogin($email, $password)) { 
       // get the user by email 
       $user = $db->getUserByEmail($email); 

       if ($user != NULL) { 
        $response["error"] = false; 
        $response['name'] = $user['name']; 
        $response['email'] = $user['email']; 
        $response['apiKey'] = $user['api_key']; 
        $response['createdAt'] = $user['created_at']; 
       } else { 
        // unknown error occurred 
        $response['error'] = true; 
        $response['message'] = "An error occurred. Please try again"; 
       } 
      } 
      else{ 
        $response['error'] = true; 
        $response['message'] = 'Login failed. Incorrect credentials'; 
       } 

      echoRespnse(200, $response); 
     }); 

必要なパラメータチェック、

function verifyRequiredParams($required_fields) { 
    $error = false; 
    $error_fields = ""; 
    $request_params = array(); 
    $request_params = $_REQUEST; 
    // Handling PUT request params 
    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) { 
     // Required field(s) are missing or empty 
     // echo error json and stop the app 
     $response = array(); 
     $app = \Slim\Slim::getInstance(); 
     $response["error"] = true; 
     $response["message"] = 'Required field(s) ' . substr($error_fields, 0, -2) . ' is missing or empty'; 
     echoRespnse(400, $response); 
     $app->stop(); 
    } 
}