Bonjour,
Je réalise un petit plugin de calendrier sous Wordpress, et pour me simplifier j'ai choisis d'utiliser le framework getherbert
Comme la documentation me l'indique j'utilise mon modèle pour potentiellement ajouter ou lire mes données en base de données sauf que j'ai erreur au niveau de l'encodage, je ne comprend pas pourquoi!
namespace MypLugin\Models;
use Illuminate\Database\Eloquent\Model as Eloquent;
class Calendar extends Eloquent {
protected $table = 'wp_calendar';
}
et dans le controller
namespace Myplugin\Controllers;
use Herbert\Framework\Models\Calendar;
class CalendarController {
/**
* Add a new event
*/
public function add()
{
return view('@Myplugin/calendar/add.twig');
}
}
J'aimerais pouvoir ajouter mes données sans cette erreur mais quelque soit l'encodage donnée utf8_general_ci ou utf8mb4 c'est pareil !
Voilà l'erreur :
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1253 COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'utf8mb4'
De mon côté, j'avais fait l'inverse, car je n'avais pas de soucis à regénérer la base de données au complet (si tu effaces les tables et que tu recommences, WordPress va tout regénérer.
Donc dans mon fichier wp-config.php, j'avais mis :
define('DB_COLLATE', 'utf8_general_ci');
Idéalement, il faudrait aussi mettre la base de données du même type que les tables, mais je ne suis pas certain si ça change vraiment quelque chose.
Edit : En regardant une table WordPress que j'ai créé hier, je vois que c'est indiqué : 'utf8mb4_unicode_ci'. Est-ce que tu peux essayer avec cette valeur ?
define('DB_COLLATE', 'utf8mb4_unicode_ci'); // plutôt que seulement 'utf8mb4'
Tu dois seulement définir la constante DB_COLLATE
dans ton fichier wp-config.php
. Lorsque WordPress créé la base de données, il utilise la valeur de cette constante, ou bien utf8mb4
. Alors que pour Herbert, c'est utf8_general_ci
qui sera utilisé dans le cas où DB_COLLATE
n'est pas définie (ou égal à ''
).
Voici le code pour illustrer :
$capsule->addConnection([
'driver' => 'mysql',
'host' => DB_HOST,
'database' => DB_NAME,
'username' => DB_USER,
'password' => DB_PASSWORD,
'charset' => DB_CHARSET,
'collation' => DB_COLLATE ?: 'utf8_general_ci',
'prefix' => $wpdb->prefix
]);
Donc, tu dois seulement définir cette constante afin de rendre compatible les deux codes. Assure-toi que la base de données actuelle est bien de la même collation que ta constante.
En espérant avoir résolu ton soucis. :-)
Merci pour ta réponse, ce bout de code je doit la mettre dans le model de mon plugin ou dans mon wp_config ?
Le soucis étant à chaque MAJ le wp_config se rénitialise non ?
Tu pourrais simplement définir la constante. Quand tu mettras à jour WordPress, le fichier wp-config.php devrait être conservé (il y a les identifiants de connexion à la base de données par exemple).
define('DB_COLLATE', 'utf8mb4');
Salut, j'ai tester de modif la constante DB_COLLATE avec utf8mb4 ou utf8_general_ci dans mon wp_config.php, mais cela est toujours pareil, j'ai la même erreur !
Merci pour ta réponse ça a fonctionné, je met donc résolu ce topic, c'est vrai que je n'avais pas pensé à regarder les tables en BDD ^^