Guardando ajustes para nuestra aplicación con CakePHP
Escrito por CristianDeluxe | Archivado en diseño web
Si te gusta desarrollar páginas aplicaciones web con PHP y aún no usas ningún framework de los varios que hay, no se a qué estás esperando, no voy a exponer aquí las múltiples ventajas de usar un framework, o cuál es mejor, todo se lo puedes preguntar a Google.
Yo personalmente uso CakePHP, y algunas veces, necesitamos guardar los ajustes de nuestra aplicación, por ejemplo: claves API, emails, datos de contacto, etc..
Navegando por The Bakery (de entrada casi obligatoria para cualquier desarrollador de CakePHP) me encontré con este artículo escrito por Cameron Perry en el que explicaba cómo guardar en nuestra base de datos todos los ajustes en un array serializado.
Es casi lo que necesito, pero no me gusta la idea de tenerlo todo en un array, es un atraso, teniendo bases de datos potentísimas como es MySQL, por lo que me puse manos a la obra y modifiqué el trabajo de Cameron.
La idea básicamente es la misma, pero en vez de guardar todos los ajustes juntos en una columna voy a guardar cada uno por separado, esto nos permitirá que los admins de nuestra aplicación puedan cambiar los ajustes como ellos quieran.
Vamos a ponernos manos a la obra.
1) Crear nuestra tabla en la base de datos
El primer paso obviamente es crear la tabla donde se almacenarán todos los ajustes, podemos hacerlo con una simple consulta como esta:
-
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
-
`key` VARCHAR(48) NOT NULL,
-
`value` TEXT,
-
PRIMARY KEY (`id`),
-
UNIQUE KEY `key` (`key`)
-
)
2) Crear el modelo, el controlador y las vistas
Utilizando “cake bake” creamos rápidamente el modelo, el controlador y las vistas.
Una vez creado, modifica el archivo de modelo, en este caso “setting.php” (normalmente está en la carpeta “app/models”), con lo siguiente:
-
var $name = 'Setting';
-
var $key = 'Opc'; // Se puede cambiar por lo que quieras
-
var $custom_settings = array();
-
-
// Recibe los datos de configuración de la base de datos
-
function getcfg(){
-
// Consigue los datos de configuración de la base de datos y los mete en un array
-
$cfgs = $this->find('all', array('fields'=>array('id','key','value')));
-
-
// Si no es un array salimos
-
if( !is_array($cfgs) ) return;
-
-
// Procesamos cada configuración
-
foreach($cfgs as $cfg) {
-
-
// Crea el array para usarlo más tarde
-
$data_array = array(
-
'id' => $cfg['Setting']['id'],
-
'key' => $cfg['Setting']['key'],
-
'value' => $cfg['Setting']['value'] );
-
$this->custom_settings[] = $data_array;
-
-
// Escrebe el array en la configuración de CakePHP
-
Configure::write($this->key . '.' . $cfg['Setting']['key'], $cfg['Setting']['value']);
-
}
-
}
-
}
3) Modificar el archivo AppController
Bien, lo siguiente es modificar el archivo AppController, si aún no lo has creado ¿a qué esperas?, debe estar en “app/app_controller.php”.
-
-
var $uses = array('Setting');
-
-
function beforeFilter(){
-
// Procesa nuestras configuraciones de la base de datos
-
$this->Setting->getcfg();
-
}
-
}
4) ¡Usarlo!
Pues ya está todo listo, ahora podemos usar nuestros ajustes en cualquier sitio, un ejemplo de cómo hacerlo es:
-
SI has cambiado el valor de la variable key en el paso 2 debes cambiarlo aquí también, por ejemplo, si has definido $key como "MyApp" tienes que leer la configuración así:
-
<pre lang="php">echo "Mi configuración" . Configure::read('MyApp.title'); //devuelve 'Mi pedazo de página';
Como ves CakePHP te deja hacer lo que tengas en la mente, y nunca está de más trabajar sobre el código que otra persona ha realizado, es uno de los principios fundamentales del open source, coger algo que ya está hecho y adaptarlo a sus necesidades. ¡Tú también puedes hacer lo mismo!
