Symfony: Mettre ses tables en UTF8 avec Doctrine (même les plugins)

Pour mettre ses tables en UTF8 avec Doctrine et le framewok Symfony, rien de plus simple.

Tout en haut de votre(vos) schema.yml, ajoutez les lignes suivantes:

options:
  collate: utf8_unicode_ci
  charset: utf8

Malheureusement, les fichiers schema.yml des plugins ne seront pas affecté car il faut que ce bout de code soit répété en haut de chaque schema.yml.

Heureusement, [MA]Pascal m’a donné une astuce de sioux qui permet de résoudre ce problème. Il suffit d’utiliser l’héritage des tables dans Doctrine. Par exemple, voici ce que ca donnerait pour le plugin sfDoctrineGuardPlugin:

sfGuardGroupUtf8:
  inheritance:  { extends: sfGuardGroup, type: simple }
  options:      { collate: utf8_unicode_ci, charset: utf8 }

sfGuardGroupPermissionUtf8:
  inheritance:  { extends: sfGuardGroupPermission, type: simple }
  options:      { collate: utf8_unicode_ci, charset: utf8 }

sfGuardPermissionUtf8:
  inheritance:  { extends: sfGuardPermission, type: simple }
  options:      { collate: utf8_unicode_ci, charset: utf8 }

sfGuardRememberKeyUtf8:
  inheritance:  { extends: sfGuardRememberKey, type: simple }
  options:      { collate: utf8_unicode_ci, charset: utf8 }

sfGuardUserUtf8:
  inheritance:  { extends: sfGuardUser, type: simple }
  options:      { collate: utf8_unicode_ci, charset: utf8 }

sfGuardUserGroupUtf8:
  inheritance:  { extends: sfGuardUserGroup, type: simple }
  options:      { collate: utf8_unicode_ci, charset: utf8 }

sfGuardUserPermissionUtf8:
  inheritance:  { extends: sfGuardUserPermission, type: simple }
  options:      { collate: utf8_unicode_ci, charset: utf8 }

[MA]Pascal me disait même qu’il étendait les fonctionnalités des plugins de cette façon, mais je ne sais pas dans quelle mesure on peut étendre une classe d’un plugin et espérer que cela fonctionne encore…

[MA]Pascal, si tu passes par là et si tu veux bien nous expliquer :p

Vus : 143
Publié par Renaud Littolff : 27