0

私は extjs+yii フレームワークで作業しています。私のクライアント側は extjs で、サーバー側の設計は yii フレームワークです。そのため、extjs のフォーム入力は json を介して yii フレームワークに送られます。この json は、yii コントローラ アクションで次のように受け入れられます。

 public function actionSetUserAnswer()
              {
     $postData = json_decode(file_get_contents("php://input"), true);
                 $clientData = $postData['data'];
                  }

extjsによって送信される実際のjsonデータは-

'{"data":[{"optionId":"","questionId":"1","isAnswer":"","option":"Aus","media":"","keyword":"","mediaTypeId":"","id":null},{"optionId":"","questionId":"2","isAnswer":"","option":"india","media":"","keyword":"","mediaTypeId":"","id":null},{"optionId":"","questionId":"3","isAnswer":"","option":"England","media":"","keyword":"","mediaTypeId":"","id":null},{"optionId":"","questionId":"4","isAnswer":"","option":"Srilanka","media":"","keyword":"","mediaTypeId":"","id":null}]}';

したがって、yii では、$clientdata 変数を使用して、option、questionId などの json のこれらの個々のフィールドにアクセスする方法を説明します。

4

1 に答える 1

0

配列の添字のみを使用できます

$option = $clientData[0]['option']

また

$questionId = $clientData[0]['questionId']

で使用するために複数の値を取得する場合はfindByAttributes、値の配列が必要です。questionId最初に JSON から s を取得します

function get_question_id($elem) {
    return $elem['questionId'];
}

$questionIds = array_map('get_question_id', $clientData);

そして、この配列をfindByAttributes

$record=Question::model()->findByAttributes(array("questionId"=>$questionIds));

最後のコメントを組み込んだ更新:

static public function get_question_id($elem)
{
    return $elem['questionId'];
}

public function actionSetUserAnswer() {
    $clientData = '{"data":[{"optionId":"","questionId":"1","isAnswer":"","option":"Au‌​s","media":"","keyword":"","mediaTypeId":"","id":null},...]}';
    $obj = json_decode($clientData['data']);
    $questionIds = array_map('get_question_id', $obj);
    var_dump($questionIds);
    $records = Question::model()->findByAttributes(array("questionId"=>$questionIds));
}
于 2013-02-06T08:10:43.747 に答える