Blog de Daniel Zegarra Rotating Header Image

Crear instancias de Zend_Db con parametros predefinidos

Lo que buscaba era tener instancias de la clase Zend_Db (de Zend Framework) sin tener que estar pasándole los parámetros de conexión o una instancia de Zend_Config.
Descubri que para que la nueva clase devuelva una instancia de Zend_Db (y no de ella misma) debía usar un método estatico.

El código siguiente es el resultado:

/**
* Crea una instancia de Zend_Db con los parametros de conexion ya preestablecidos.
*
* @copyright Copyright (c) 2008, Daniel Zegarra
* @access public
*/
class System_DB {

/**
* Direccion donde se encuentra el host de la base de datos
* @access private
*/
private static $_Server = "localhost";

/**
* Nombre de usuario de la base de datos
* @access private
*/
private static $_User = "root";

/**
* Contraseña de la cuenta
* @access private
*/
private static $_Pass = "123456";

/**
* Base de datos predeterminada a usar. Dejar en blanco para obligar a cada modulo a elegir la propia.
* @access private
*/
private static $_DB = "midb";

/**
* Adaptador Zend
* @access private
*/
private static $_zendadapter = "Pdo_Mysql";

/**
* Este es el metodo que manufactura.
*
* @param str $DB Nombre de la base de datos
* @param str $Server Host de la base de datos
* @param str $User Nombre de usuario de la cuenta
* @param str $Pass Contraseña de la cuenta
* @return Zend_Db
*/
public static function create($DB=null, $Server=null, $User=null, $Pass=null){
//Actualizando propiedades
if(!empty($DB) && is_string($DB))
self::$_DB = $DB;
if(!empty($Server) && is_string($Server))
self::$_Server = $Server;
if(!empty($User) && is_string($User))
self::$_User = $User;
if(!empty($Pass) && is_string($Pass))
self::$_Pass = $Pass;

return Zend_Db::factory(self::$_zendadapter, array(
'host'     => self::$_Server,
'username' => self::$_User,
'password' => self::$_Pass,
'dbname'   => self::$_DB
));
}

/**
* Realiza una conexion y consulta de prueba.
*
* @return str
*/
public function test(){
//Conectando a la BD
try {
$db = self::create();
$db->getConnection();
} catch (Zend_Db_Adapter_Exception $e) {
return 'Zend_Db_Adapter_Exception: '.$e->getMessage();
} catch (Zend_Exception $e) {
return 'Zend_Exception: '.$e->getMessage();
}

//Haciendo la consulta
$sql = "SELECT 'Prueba exitosa'";
return $db->fetchOne($sql);
}
}

El método test te ayudará a comprobar si la clase y los datos de conexión funcionan correctamente.
El código es libre.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>