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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
doctrine:
    dbal:
        types:
            base64: CryptoBoard\DashboardBundle\Types\Base64
Et dans le mapping de mon entité (format YML) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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