2013-11-27 7 views
0

iam regreting за последние два дня с тех пор, как я понял, что могу создать зашифрованный пользовательский тип, чтобы шифрование и дешифрование данных выполнялись в этом типе, так что мне не нужно было бы вызывать эти функции evrytime, как правило, чтобы облегчить мою жизнь, но превратить ее в живой ад:/Doctrine2 Custom Type Not Returning Data

Мой пользовательский тип вставляет зашифрованные данные в базу данных, как я думал, но проблема в том, когда мне нужно получить данные, вот отпечаток объекта, который держит retrived данных из базы данных

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'); 
     } 
+1

В чем вопрос? Что не работает? Любые исключения? Что вы уже пробовали? – nifr

+0

Просто прочитайте вопрос человек, я на краю здесь, я не получаю данные из базы данных, как вы можете видеть из печатного объекта, у него просто пустые свойства – user3035443

+2

Прочитайте какой вопрос «* man *»? Я не вижу вопросительного знака где-нибудь в вашем удивительно подробном «вопросе *» ... ... btw пользовательские типы обычно добавляются в разделе конфигурации DoctrineBundle под 'doctrine.dbal.types' в вашем' app/config/config .yml' или какой-либо файл, который импортируется там, где находится конфигурация 'doctrine' ... см. [ссылка на конфигурацию] (http://symfony.com/doc/current/reference/configuration/doctrine.html). Просто мои маленькие центы «* man *» :) – nifr

ответ

0

я исправить это самостоятельно, его не общая проблема, но плохо объяснить here.I нужно, во-первых определить EncryptionProvider который является моим классом, который реализует PHPSecLib \ AES.Соответственно

public function boot() 
{ 
    new EncryptionInit(); 
    EncryptionProvider::setCrypter(EncryptionProvider::AES, $this->container->getParameter('uapi_core.security_key'), $x = array()); 

    $connection = $this->container->get('doctrine')->getConnection(); 
    if(!Type::hasType('encrypted')) 
    { 
     Type::addType('encrypted', 'Uapi\CoreBundle\System\DBALType\EncryptedType'); 
     $connection->getDatabasePlatform()->registerDoctrineTypeMapping('encrypted', 'encrypted'); 
    } 


}