Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
tips_informatiques:programmation:php:cakephp [2010/06/08 12:16] nico |
tips_informatiques:programmation:php:cakephp [2012/02/07 14:36] (Version actuelle) |
||
---|---|---|---|
Ligne 110: | Ligne 110: | ||
</code> | </code> | ||
+ | |||
+ | ====== Encodage de la base de données ====== | ||
+ | |||
+ | __CakePHP__ : 1.3.x (probablement 1.2.x) | ||
+ | |||
+ | |||
+ | __Problème__ : | ||
+ | |||
+ | En faisant un export depuis une base de données MySQL vers une autre base de données, j'ai réalisé que les textes n'étaient pas encodés correctement dans la première. | ||
+ | |||
+ | Une des conséquences dans mon cas particulier était le fait que lors de l'import dans la seconde base de données, l'ensemble des caractères accentués était affiché dans le mauvais encodage une fois dans les pages web. Normal, puisque le script d'export SQL généré par phpMyAdmin contenait déjà ces caractères mal encodés. | ||
+ | |||
+ | Les deux bases de données contenaient pourtant des champs encodés en //utf8_unicode_ci//. | ||
+ | |||
+ | __Solution__ : | ||
+ | |||
+ | Le problème ne venait pas de l'encodage des champs dans MySQL, mais de la communication entre CakePHP et MySQL qui se faisait dans le mauvais encodage. | ||
+ | |||
+ | Mais il est possible de spécifier au driver MySQL l'encodage à utiliser dans le fichier de configuration de base de données de CakePHP: | ||
+ | |||
+ | <code php> | ||
+ | class DATABASE_CONFIG { | ||
+ | |||
+ | var $default = array( | ||
+ | 'driver' => 'mysql', | ||
+ | 'encoding' => 'utf8', //-> here the encoding is forced | ||
+ | 'persistent' => false, | ||
+ | 'host' => 'localhost', | ||
+ | 'login' => 'my_login', | ||
+ | 'password' => 'my_password', | ||
+ | 'database' => 'my_database', | ||
+ | 'prefix' => 'db_', | ||
+ | ); | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | __Remarque__ : | ||
+ | |||
+ | Dans le cas où vous avez déjà des caractères mal encodés dans votre base de données, le script suivant peut vous permettre de remplacer ces caractères afin de pouvoir néanmoins utiliser le script SQL obtenu lors de l'export: [[tips_informatiques:Linux:Shell:Fichiers_Dossiers:Fichiers_Dossiers#Remplacer des caractères UTF-8 affichés en ISO-8859-1 dans un fichier | Remplacer des caractères UTF-8 affichés en ISO-8859-1 dans un fichier]] | ||
+ | |||
+ | |||
+ | |||
+ | ====== Bake des vues avec les vues hors CRUD ====== | ||
+ | |||
+ | __Problème__: | ||
+ | |||
+ | Un bake lancé avec un simple | ||
+ | |||
+ | <code> | ||
+ | $ cake bake | ||
+ | </code> | ||
+ | |||
+ | ne génère que les actions du CRUD. | ||
+ | |||
+ | __Solution__: | ||
+ | |||
+ | Lancer la commande de la façon suivante: | ||
+ | |||
+ | <code> | ||
+ | $ cake bake view all | ||
+ | </code> | ||
+ | |||
+ | De cette manière, bake recherche les templates pour toutes les actions présentes dans les contrôleurs, ce qui est en plus bien plus rapide pour générer toutes les vues :-) | ||
+ | |||
+ | __Cake 2__: | ||
+ | |||
+ | <code> | ||
+ | /path/to/project/app$ ../lib/Cake/Console/cake bake view Format admin_copy | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ====== Bake rapide d'un contrôleur avec actions publiques et admin ====== | ||
+ | |||
+ | __Commande__: | ||
+ | |||
+ | Lancer la commande de la façon suivante: | ||
+ | |||
+ | <code> | ||
+ | $ cake bake controller Comment public admin | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ====== find avec conditions sur un modèle obtenu par contain ====== | ||
+ | |||
+ | __Code__: | ||
+ | |||
+ | <code php> | ||
+ | $this->Structure->contain(array('Document' => array('fields' => array('id', 'pid', 'title', 'year'), | ||
+ | 'conditions' => array('year' => $years), | ||
+ | 'DocumentSubtype' => array('id', 'name', | ||
+ | 'DocumentType' => array('id', 'name')), | ||
+ | 'PublicationVector' => array('id', 'name'), | ||
+ | 'Author' => array('id', 'firstname', 'lastname', 'cn_individu')) | ||
+ | ) | ||
+ | ); | ||
+ | </code> |