FYI I have the answer.
The code has to be placed in the boot() method of the bundle using it.
Le vendredi 28 novembre 2014 22:26:08 UTC+1, Ben a écrit :
>
> Hello everyone,
>
> I have a problem I don't succeed to resolve.
> I have a *Crypter *class meant to *encrypt/decrypt *data : it has a
> *encode($value)* method, a *decode($value)* method, and a $*key *property
> required in the constructor. This key is stored in my *parameters.yml *and
> depends on the project.
>
> As I want my data to be encrypted when my entity is persisted, and
> decrypted when loaded, I have to define a custom Doctrine type.
>
> So I wrote a *DoctrineCrypter *class that extends
> *Doctrine\DBAL\Types\Type*.
> It has a getter / setter for accessing the *Crypter *class, and
> *convertToPhpValue($value)* simply leads to
> *$this->getCrypter()->decode($value)*, while
> *convertToDatabaseValue($value)* is a shortcut to
> *$this->getCrypter()->encode($value)*.
>
> All right. Now, how to inject the *Crypter *class into the *DoctrineCrypter
> *type, since the constructor of the parent class
> *Doctrine\DBAL\Types\Type *has been declared *final *and *private *by
> Doctrine ?
>
> Well, what I have to do is to register the type first via
> *Type::addType()*, then access it via* Type::getType()* for calling
> *setCrypter()* with the configured *Crypter *class. And afterwards,
> register the type mapping to Doctrine :
>
> if (!Type::hasType('sbs_crypter'))
> Type::addType('sbs_crypter',
> 'DoctrineCrypter');Type::getType('sbs_crypter')->setCrypter($container->get('crypter_object'));
>
> $connection = $this->container->get('doctrine.dbal.default_connection');
> $connection->getDatabasePlatform()->registerDoctrineTypeMapping('sbs_crypter',
> 'sbs_crypter');
>
>
> The problem is : *where do I put this code* ? If I hook this to
> *kernel.request* with an event listener, it works pretty well. But in
> HTTP only. When I use the console (doctrine:schema:update for instance), I
> get the following exception :
>
> [Doctrine\DBAL\DBALException]
> Unknown column type "sbs_crypter" requested. Any Doctrine type that you
> use has to be registered with \Doctrine\DBAL\Types\Type::addType(). You can
> get a list of all the known types with
> \Doctrine\DBAL\Types\Type::getTypesMap().
> If this error occurs during database introspection then you might have
> forgot to register all database types for a Doctrine Type. Use
> AbstractPlatform#registerDoctrineTypeMapping()
> or have your custom types implement Type#getMappedDatabaseTypes(). If the
> type name is empty you might have a problem with the cache or forgot some
> mapping information.
>
>
>
> On the other hand, if I put this code on a *compiler pass*, it doesn't
> work either, since *doctrine.dbal.default_connection* isn't known from
> the container yet.
>
> Do you have ideas to make this work both on console and http ?
>
> I'm using Symfony - you guessed it.
>
> Thanks,
> Ben
>
--
You received this message because you are subscribed to the Google Groups
"doctrine-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/doctrine-user.
For more options, visit https://groups.google.com/d/optout.