【发布时间】:2013-11-27 21:12:09
【问题描述】:
最近两天我很后悔,因为我想到我可以创建加密的自定义类型,以便在该类型中完成数据的加密和解密,这样我就不需要每次都调用这些函数,通常是为了让我的生活更轻松,但它把它变成了人间地狱:/
我的自定义类型是按照我的意图在数据库中插入加密数据,但问题是当我需要检索数据时,这里是保存从数据库检索的数据的对象的打印
Uapi\CoreBundle\Entity\Request Object
(
[id:Uapi\CoreBundle\Entity\Request:private] => 2
[clientIPAdress:Uapi\CoreBundle\Entity\Request:private] =>
[clientHost:Uapi\CoreBundle\Entity\Request:private] =>
[clientISP:Uapi\CoreBundle\Entity\Request:private] =>
[clientOS:Uapi\CoreBundle\Entity\Request:private] =>
[clientOSVersion:Uapi\CoreBundle\Entity\Request:private] =>
[clientBrowser:Uapi\CoreBundle\Entity\Request:private] =>
[clientBrowserVersion:Uapi\CoreBundle\Entity\Request:private] =>
[clientLanguage:Uapi\CoreBundle\Entity\Request:private] =>
[clientCountry:Uapi\CoreBundle\Entity\Request:private] =>
[clientCity:Uapi\CoreBundle\Entity\Request:private] =>
[possibleProxy:Uapi\CoreBundle\Entity\Request:private] =>
[proxyIPAdress:Uapi\CoreBundle\Entity\Request:private] =>
[torExitNode:Uapi\CoreBundle\Entity\Request:private] =>
[maliciousInput:Uapi\CoreBundle\Entity\Request:private] =>
[maliciousInputLog:Uapi\CoreBundle\Entity\Request:private] =>
[serverIPAdress:Uapi\CoreBundle\Entity\Request:private] =>
[serverPort:Uapi\CoreBundle\Entity\Request:private] =>
[requestMethod:Uapi\CoreBundle\Entity\Request:private] =>
[requestTimeFloat:Uapi\CoreBundle\Entity\Request:private] => P�a�;
)
这是我的加密类型类定义
use Doctrine\DBAL\Types\Type;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Uapi\CoreBundle\Provider\EncryptionProvider;
class EncryptedType extends Type {
const ENCRYPTED = 'encrypted';
public function getName()
{
return self::ENCRYPTED;
}
public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform) {
return $platform->getVarcharTypeDeclarationSQL($fieldDeclaration);
}
public function convertToDatabaseValue($value, AbstractPlatform $platform) {
return ($value === null)? null : base64_encode(EncryptionProvider::getCrypter()->encrypt($value));
}
public function convertToPHPValue($value, AbstractPlatform $platform) {
return ($value === null)? null : base64_decode(EncryptionProvider::getCrypter()->decrypt($value));
}
}
我确实在核心捆绑类的引导函数中注册了它
$connection = $this->container->get('doctrine')->getConnection();
if(!Type::hasType('encrypted'))
{
Type::addType('encrypted', 'Uapi\CoreBundle\System\DBALType\EncryptedType');
$connection->getDatabasePlatform()->registerDoctrineTypeMapping('encrypted', 'encrypted');
}
【问题讨论】:
-
这里有什么问题?什么不工作?有什么例外吗?你已经尝试了什么?
-
只是阅读问题,我在这里边缘,我没有从数据库中获取数据,正如您从打印对象中看到的那样,他只有空属性
-
阅读什么问题 "man" ?我在您非常详细的“question”中的任何地方都看不到问号...顺便说一句,自定义类型通常添加到您的
app/config/config.yml或一些doctrine.dbal.types下的DoctrineBundle 的配置部分中导入到那里的文件包含doctrine配置...请参阅configuration reference。只是我的几分钱“man”:) -
虽然您添加自定义类型的方式可能不会导致问题......即因为真正的问题很可能与您对自定义类型本身的实现有关。 .. 我建议您仍然首先在
doctrine.dbal.types下添加您的类型symfony-way,以确保您当前的实现不会导致此或任何其他问题。 -
您能否删除问题或添加您的发现/最终工作解决方案作为答案?这样其他用户也可以从中受益。
标签: symfony doctrine-orm custom-type