我正在使用amazon sdk v2并使用aws factory for dynamoDB,我有一个简单的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;
}
}
答案 0 :(得分:4)
使用适用于PHP 2.x的AWS开发工具包,您应该假设在不抛出异常的情况下返回的任何操作都是成功的。对于DynamoDB,如果出现错误,将抛出Aws\DynamoDb\Exception\DynamoDbException
(或子类)。此外,对于DynamoDB,在您的项目已写入至少2个位置之前,该服务不会响应,从而确保数据的完整性。
此外,使用适用于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 for PHP用户指南的Commands and Response Models sections。