PHP code example of autoprotect-group / php-dynamodb-odm
1. Go to this page and download the library: Download autoprotect-group/php-dynamodb-odm library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
autoprotect-group / php-dynamodb-odm example snippets
$client = new DynamodbOperationsClient($dynamoDbClient);
$marshaler = new Marshaler();
$queryBuilder = new QueryBuilder($marshaler, new ExpressionFactory($marshaler));
// annotation reader
$annotationReader = new AnnotationReader();
// annotation manager
$annotationManager = new AnnotationManager($annotationReader);
$newModelHydrator = new Hydrator(NewModel::class, $annotationManager);
$sortKeyModelHydrator = new Hydrator(SortKeyModel::class, $annotationManager);
// serializer for
$serializer = new Serializer($annotationManager);
class ExampleDemoModel extends Model
{
protected const TABLE_NAME = 'test-table';
// Primary means that this is a partition key for the DynamoDb table
#[StringType, Primary] protected string $id;
#[StringType] protected string $name;
#[FloatType] protected float $price;
#[Money] protected Money $priceNet;
#[FloatType] protected float $percent;
#[IntegerType] protected int $itemsAmount;
#[DateType] protected DateTime $createdAt;
#[BooleanType] protected bool $isDeleted;
#[BooleanType] protected bool $isPhoneNumber;
#[ModelType([ModelType::MODEL_CLASS_NAME => RelatedModel::class])]
protected RelatedModel $buyer;
#[CollectionType([CollectionType::MODEL_CLASS_NAME => RelatedModel::class])]
protected array $buyers;
#[ModelType([Asset::MODEL_CLASS_NAME => Asset::class])]
protected Asset $asset;
#[HashMapType([HashMapType::MODEL_CLASS_NAME => RelatedModel::class])]
protected array $buyersMap;
// getter and setters should be here
}
class ModelWithEnumeration extends Model
{
#[Primary, StringType]
protected string $id;
#[EnumType]
protected OrderStatus $orderStatus;
// union types
#[EnumType]
protected OrderStatus|ApplicationStatus $unionStatus;
// union types with null
#[EnumType]
protected OrderStatus|ApplicationStatus|null $unionNullableStatus;
// isStrict means the value will be null in case wrong value comes from the DB
#[EnumType(isStrict: false)]
protected ?OrderStatus $orderStatusAdditional = null;
#[EnumType]
protected CustomerType $customerType;
}
MyEncryptor implements EncryptorInterface {
protected const ENCRYPTION_KEY = 'def000008053addc0f94b14c0e480a10631a0a970b3565e5a7a2aeaeeb51a39e2d139a8977bc02be0195f0036a29aefff9df6d2ddb81432d14b4dce82b83b3a95c6d0205';
public function decrypt(string|array $encryptedData, array $options = []): string|array
{
// any decryption way may be implemented
if (is_array($encryptedData)) {
// ...specific property decryption operations...
return $encryptedData;
}
return Crypto::decrypt(
$encryptedData,
Key::loadFromAsciiSafeString(static::ENCRYPTION_KEY)
);
}
}
$newModelHydrator = new Hydrator(
EncryptionDemoModel::class,
$annotationManager,
new MyEncryptor(),
);
class EncryptionDemoModel extends Model
{
#[Key\Primary, Types\StringType]
protected string $id;
// ability to encrypt a specific property in a scalar associative array
#[Types\ScalarCollectionType, Encrypted(["encryptedProperty" => "secretProperty"])]
protected array $encryptedArray;
#[Types\StringType, Encrypted]
protected string $encryptedName;
}