Separación de funcionalidades (similar a fachadas)
Viernes, 18 Abril 2008
CakePHP 1.2 nos proporciona un soporte con un significado similar al de las fachadas, que nos permite:
- Separar los distintos tipos de funcionalidades en los controladores: podemos separar, por ejemplo, las funciones que corresponden al administrador, del resto de las funciones, simplemente iniciando el nombre de dicha función con la cadena "admin_".
- Separar por urls los distintos apartados: por ejemplo, para acceder a una función de un controlador que sea "admin_listar", tendremos que escribir la url: admin/controlador/listar. De esta forma sabemos en todo momento en qué parte de nuestro proyecto nos movemos.
- Como consecuencia y para que nuestro proyecto mucho más organizado, separaremos también las vistas en función de si estamos en la sección del administrador o en las otras secciones.
- Esto nos permitirá también realizar un tratamiento personalizado de cada sección: por ejemplo, en el beforeFilter del AppController le podemos introducir un filtro de login.
Veamos cómo realizar la configuración de todo lo comentado. En el archivo app/config/routes.php, escribimos:
-
Configure::write('Routing.admin', 'admin');
En el controlador:
-
class UsuariosController extends AppController
-
{
-
var $layout = 'usuarios';
-
function admin_listar(){ //Comandos}
-
function listar(){ //Comandos }
-
}
De esta manera podemos cambiar el layout en función de dónde nos encontremos y tenerlas estructuradas en distintas carpetas. Para ello, en el archivo cake/libs/controller/app_controller.php escribimos:
-
class AppController extends Controller
-
{
-
function beforeFilter()
-
{
-
{
-
$this->layout = 'admin/'.$this->layout;
-
}
-
// O bien, comparando una variable que se almacena en <em>$this->data</em>:
-
{
-
$this->layout = 'admin/'.$this->layout;
-
}
-
// La última posibilidad es comparando la variable <em>prefix</em> de <em>$this->data</em>:
-
{
-
$this->layout = 'admin/'.$this->layout;
-
}
-
}
-
}
Podríamos configurar tantas secciones como queramos simplemente añadiendo más líneas en el archivo routes.php, obteniendo un código mucho más limpio y legible.
