2010-11-16 7 views
10

estoy usando Zend_Db y tratar de cambiar el juego de caracteres UTF-8 a, aquí está el código:mejor manera de configurar charset para Zend_Db (o al menos mejor que lo que estoy haciendo actualmente)

config.ini:

[development] 
db.host = "localhost" 
db.username = "root" 
db.password = "toor" 
db.dbname = "db_whoopdiedo" 
db.charset = "utf8" 

Bootstrap.php:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 

    public function _initAutoload() 
    { 
     Zend_Registry::set(
      'config', 
      new Zend_Config_Ini(APPLICATION_PATH.'/configs/config.ini', 'development') 
     ); 

     Zend_Registry::set(
      'db', 
      Zend_Db::factory('Pdo_Mysql', Zend_Registry::get('config')->db) 
     ); 

     Zend_Registry::get('db')->setFetchMode(Zend_Db::FETCH_OBJ); 
     Zend_Registry::get('db')->query("SET NAMES 'utf8'"); 
     Zend_Registry::get('db')->query("SET CHARACTER SET 'utf8'"); 
    } 
} 

pensé que sería suficiente para añadir el juego de caracteres en la configuración, pero sólo applys si lo fijo usando directamente:

Zend_Registry::get('db')->query("SET NAMES 'utf8'"); 
Zend_Registry::get('db')->query("SET CHARACTER SET 'utf8'"); 

Mi pregunta: ¿hay una mejor manera de configurar el charset, quizás config wise?

Respuesta

17

En primer lugar me gustaría romper su configuración de base de datos en su propia función init así:

/** 
* Initiate Zend Autoloader 
* @return Zend_Db_Adapter 
*/ 
protected function _initDatabase() 
{ 
    $resource = $this->getPluginResource('db'); 
    $db = $resource->getDbAdapter(); 
    Zend_Registry::set("db", $db); 
    return $db; 
} 

El ejemplo anterior utiliza los recursos de los cuales están predefinidos estructuras de configuración para ciertas tareas comunes en Zend Framework. Simplemente por tener lo siguiente en mi fichero de configuración application.ini, podemos abordar el recurso 'db' en el Bootstrap arriba:

resources.db.adapter = "pdo_sqlite" 
resources.db.params.host = "localhost" 
resources.db.params.username = "databaseuser" 
resources.db.params.password = "mysecretpassword" 
resources.db.params.dbname = APPLICATION_PATH "/data/db/ccymod.db" 
resources.db.isDefaultTableAdapter = true 

Este ejemplo es para una db sqlite pero MySQL tendría un aspecto similar, pero con pdo_mysql y el nombrebd no sería una ruta de archivo sino una cadena.

Más documentación sobre los recursos se puede encontrar aquí:

http://framework.zend.com/manual/en/zend.application.available-resources.html

Ahora, utilizando la sección Agin recursos de configuración podemos añadir a la misma las siguientes líneas para establecer el carácter de base de datos creada de esta manera:

resources.db.params.charset = "utf8" 
resources.db.params.driver_options.1002 = "SET NAMES utf8;" 

Si todavía tiene problemas, eche un vistazo a la publicación del blog de zend framework de Rob Allen en akrabat dot com y los comentarios sobre el sistema UTF8 y la configuración de mysql para el recurso ZF s.

+0

eso es lo que yo llamo completo: D Funciona como un encanto, ¡gracias! – Hannes

1

toman de nuestros application.ini:

db.params.driver_options.3 = "SET NAMES 'utf8'" 
Cuestiones relacionadas