Doctrine2型を使用してデータベース値を暗号化しています。この型は、内部的にPHP値を暗号化および復号化することにより、データベース値との間で変換します。これはDoctrine2型のために完全に機能します。Doctrine型を使用して同じPHP値でデータベース値を更新する
暗号化は、base64でエンコードされた文字列として格納されます。すべての暗号化された文字列には、固定の定義済み接頭辞が前置されます。つまり、データベースフィールドには暗号化された値と復号化された値(外部要件によって必要とされる)が含まれ、接頭辞によって認識されます。
私の願いは、以下の通りです:
私は実体を持っていると仮定します。 Doctrineを使ってエンティティのすべてのプロパティの暗号化または復号化を強制したい。これを行うには、型内のデータベース値を暗号化された形式または復号化された形式で保存する必要があります。
ただし、メソッドEntityManager::computeChangeSets
を呼び出すと、エンティティのプロパティは変更されていません。もちろん、実際のデータ(PHP値)は変更されません。ただし、データベースの値は変更される予定です。
これを行う方法は?
Doctrineのタイプのいくつかのコード:私はすべての不要なコードを削除した
<?php
use Doctrine\DBAL\Types\Type;
class EncryptedType extends Type {
private static $forceDecrypt = false;
// Encryption stuff, like encrypt() and decrypt()
public function convertToPHPValue($value, AbstractPlatform $platform) {
if ($value === null) {
return null;
}
return $this -> decrypt($value, false);
}
public function convertToDatabaseValue($value, AbstractPlatform $platform) {
if ($value === null) {
return null;
}
if (self::$forceDecrypt) {
return (string) $value;
}
return $this -> encrypt((string) $value, false);
}
}
。
私はそうは思わない。Doctrineは 'EncryptedType'クラスの静的フィールドの変更についてどのように知っていますか?私はDoctrineイベントを使ってこれを解決しなければならないのではないかと心配しています。 –