2013-09-26 63 views
0

我使用亞馬遜sdk v2和使用aws工廠dynamoDB和我有一個簡單的putItem操作,但我不知道如何可以確保putItem成功或沒有,因爲putItem返回不包含有關操作狀態的任何信息的模型。任何想法? 這裏是我的代碼我如何確保DynamoDB 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

有了AWS SDK的PHP 2.x中,你應該假設,如果沒有拋出異常返回任何操作成功。在DynamoDB的情況下,如果出現錯誤,則會拋出Aws\DynamoDb\Exception\DynamoDbException(或子類)。另外,就DynamoDB而言,只有將您的項目寫入至少兩個位置後,服務纔會響應,以確保數據的完整性。

此外,使用適用於PHP 2.x的AWS開發工具包,您可以使用長格式命令語法來訪問Guzzle請求和響應對象,如果您有興趣對它們進行自省檢測。這裏有一個例子:

$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爲PHP用戶指南的Commands and Response Models sections

+0

這真的幫了很大忙。謝謝。 – ufucuk

+0

沒問題! :-) –

相關問題