Nouveau type Doctrine qui update la BDD à l'infini
Salut :)
J'e'ssaye de créer un nouveau type de champ, qui fait un tout bête base64_encode à l'enregistrement en base, et bien sûr un base64_decode lors de la lecture de la base.
Voici le code de la classe :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| <?php
namespace CryptoBoard\DashboardBundle\Types;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\DBAL\Types\Type;
class Base64 extends Type
{
const BASE64 = 'base64';
public function getName()
{
return self::BASE64;
}
public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
{
return 'VARCHAR(' . intval($fieldDeclaration['length']) . ')';
}
public function convertToDatabaseValue($value, AbstractPlatform $platform)
{
return ($value === null) ? null : base64_encode($value);
}
public function convertToPHPValue($value, AbstractPlatform $platform)
{
return ($value === null) ? null : base64_decode($value);
}
} |
Dans mon fichier app/config/config.yml, j'ai ajouté la déclaration de ce type :
Code:
1 2 3 4
| doctrine:
dbal:
types:
base64: CryptoBoard\DashboardBundle\Types\Base64 |
Et dans le mapping de mon entité (format YML) :
Code:
1 2 3 4 5 6 7
| CryptoBoard\DashboardBundle\Entity\Rig:
# -------
fields:
test:
type: base64
length: 255
nullable: true |
Aucun problème pour SF2, qui comprend bien mon type, passe bien dans mon code, etc.
Sauf que quand je fais un php app/console doctrine:schema:update --force, il repasse à l'infini sur mon champ pour lui "redonner" le type VARCHAR(255), qu'il a déjà. Et là, je comprend pas ...
A mon avis, SF2 croit que mon champ est de type string "en base", et qu'il faut le convertir en champ de type "base64". Rien ne doit lui dire que le champ est bien de type "base64", et donc, il refait ça à l'infini.
Ca reste une supposition, mais dans tous les cas je ne sais pas quoi faire ...
Si quelqu'un peut m'aider la dessus :mouarf: