Я не знаю, является ли это правильным способом, но я недавно реализовал это, создав пользовательский тип отображения , согласно документации Doctrine.Что-то вроде следующего:
class EncryptedStringType extends TextType
{
const MYTYPE = 'encryptedstring'; // modify to match your type name
public function convertToPHPValue($value, AbstractPlatform $platform)
{
return base64_decode($value);
}
public function convertToDatabaseValue($value, AbstractPlatform $platform)
{
return base64_encode($value);
}
public function getName()
{
return self::MYTYPE;
}
}
Я зарегистрировал этот тип в своем классе комплектов:
class MyOwnBundle extends Bundle
{
public function boot()
{
$em = $this->container->get("doctrine.orm.entity_manager");
try
{
Type::addType("encryptedstring", "My\OwnBundle\Type\EncryptedStringType");
$em->
getConnection()->
getDatabasePlatform()->
registerDoctrineTypeMapping("encryptedstring", "encryptedstring");
} catch (\Doctrine\DBAL\DBALException $e)
{
// For some reason this exception gets thrown during
// the clearing of the cache. I didn't have time to
// find out why :-)
}
}
}
и затем смог ссылаться на него при создании своих сущностей, например:
/**
* @ORM\Column(type="encryptedstring")
* @Assert\NotBlank()
*/
protected $name;
Это была быстрая реализация, поэтому мне было бы интересно узнать, как правильно это сделать.Я также предполагаю, что ваш сервис шифрования доступен из контейнера;Я не знаю, насколько возможно / возможно было бы передать услуги в пользовательские типы таким образом ...: -)