1

私は amazon sdk v2 を使用しており、dynamoDB に aws factory を使用しています。単純な putItem 操作がありますが、putItem が操作のステータスに関する情報を含まないモデルを返すため、putItem が成功したかどうかを確認する方法がわかりません。何か案が?これが私のコードです

class DynamoLogger{
protected $client;
protected $tableName;

public function __construct(ServiceBuilder $builder, $tableName)
{
    $this->client = $builder->get('dynamodb');
    $this->tableName = $tableName;
}

public function log(Request $request)
{
    $model = $this->client->putItem(array(
        'TableName' => $this->tableName,
        'Item' => array(
            'cc_id' => array(
                'S' => $request->get('cc_id')
            ),
            'date' => array(
                'S' => date('Y-m-d H:i:s') . substr((string)microtime(), 1, 8)
            ),
            'tt_id' => array(
                'N' => $request->get('tt_id')
            ),
            'action_name' => array(
                'S' => $request->get('name')
            ),
            'action_value' => array(
                'S' => $request->get('value')
            ),
            'gg_nn' => array(
                'S' => $request->get('gg_nn')
            ),
            'ffr_id' => array(
                'N' => $request->get('ffr_id')
            )
        ),
        'ReturnValues' => 'ALL_OLD'
    ));
    return $model;
}

}

4

1 に答える 1

5

AWS SDK for PHP 2.x では、例外をスローせずに戻る操作はすべて成功したと想定する必要があります。DynamoDB の場合Aws\DynamoDb\Exception\DynamoDbException、エラーが発生すると (またはサブクラス) がスローされます。また、DynamoDB の場合、項目が少なくとも 2 つの場所に書き込まれるまでサービスは応答しないため、データの整合性が保証されます。

さらに、AWS SDK for PHP 2.x を使用すると、長い形式のコマンド構文を使用して、Guzzle Request および Response オブジェクトにアクセスすることができます (それらをイントロスペクトすることに関心がある場合)。次に例を示します。

$command = $client->getCommand('PutItem', array(/*...params...*/));
$model = $command->getResult(); // Actually executes the request

$request = $command->getRequest();
$response = $command->getResponse();
var_dump($response->isSuccessful());

AWS SDK for PHP ユーザーガイドのコマンドと応答モデルのセクションも参照してください。

于 2013-09-26T22:22:39.477 に答える