Bienvenidos sean a este post, hoy estableceremos la clase controladora de la conexion a las bases.
De esto hablamos un poco en el post anterior pero ahora lo pondremos en practica, lo primero que haremos sera crear un nuevo directorio dentro de app llamado Helpers, en este nuevo directorio crearemos un archivo que llamaremos Database.php, nuestro siguiente paso sera agregar este bloque:
Database.php
<?php
namespace App\Helpers;
use PDO;
Tal como vinimos haciendo hasta ahora primero definimos el namespace de nuestra clase y luego importamos a PDO, nuestro siguiente paso sera crear el bloque de la definicion de la clase:
class Database extends PDO
{
}
Aqui crearemos una clase llamada Database la cual sera heredera de PDO, dentro de este nuevo bloque agregaremos a la siguiente variable:
protected static $instancias = array();
Aqui tendremos una variable que sera un array de todas las bases que accedamos para ser reutilizadas, tambien nos asegura que solo se usara una sola conexion a la base de datos, nuestro siguiente paso sera definir un metodo get como el que vimos en la clase de configuracion en este post, para ello agregaremos el siguiente codigo despues de la linea anterior:
public static function get($config)
{
$tipo=$config['db_tipo'];
$host=$config['db_host'];
$nombre=$config['db_nombre'];
$usuario=$config['db_usuario'];
$clave=$config['db_clave'];
$id="$tipo.$host.$nombre.$usuario.$clave";
if (isset(self::$instancias[$id]))
return self::$instancias[$id];
$instancia = new Database("$tipo:host=$host;dbname=$nombre;"
. "charset=utf8",
$usuario,
$clave);
$instancia->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
self::$instancias[$id] = $instancia;
return $instancia;
}
Este metodo recibira un atributo que no es otra que la clase de configuracion que tenemos en app/Config.php, observen que de esta clase obtendremos los valores que establecimos en el metodo get de esta clase y la asignaremos a distintas variables, una vez que tenemos todos estos valores los concatenaremos entre si y dicha concatenacion la almacenaremos en una variable llamada id, este sera el id unico de cada una de nuestras conexiones, despues tenemos un condicional que verifica si el valor en la posicion identificada con id en instancias existe, en caso de ser verdadero lo devuelve, luego crearemos una nueva variable donde la usaremos para almacenar un nuevo objeto de esta clase, donde primero pasaremos una cadena con varios de los valores de los antes obtenidos, en este caso son el tipo, el host, nombre de la base y el tipo de charset, fuera de esta cadena pasamos el usuario y clave de conexion, la siguiente linea establece la forma de manejar cualquier tipo de error como una excepcion, si llegamos a esta parte del metodo fue porque fallo el condicional, por lo tanto toma al array instancias asigna una posicion con el id generado y establece al objeto almacenado en instancia, por ultimo lo devuelve, veamos como quedo nuestro codigo por el momento:
Database.php
<?php
namespace App\Helpers;
use PDO;
class Database extends PDO
{
protected static $instancias = array();
public static function get($config)
{
$tipo=$config['db_tipo'];
$host=$config['db_host'];
$nombre=$config['db_nombre'];
$usuario=$config['db_usuario'];
$clave=$config['db_clave'];
$id="$tipo.$host.$nombre.$usuario.$clave";
if (isset(self::$instancias[$id]))
return self::$instancias[$id];
$instancia = new Database("$tipo:host=$host;dbname=$nombre;"
. "charset=utf8",
$usuario,
$clave);
$instancia->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
self::$instancias[$id] = $instancia;
return $instancia;
}
}
En el proximo post agregaremos los verdaderos metodos que se encargaran de toda la magia.
En resumen, hoy hemos creado la clase controlador de las bases, en este caso hemos creado no solamente la clase sino todo lo suficiente para tengamos una sola instancia de conexion para las bases evitando duplicacion que puede generarnos otros inconvenientes, espero les haya gustado sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50



Donación
Es para mantenimento del sitio, gracias!
$1.50
Click here to purchase.