Separación de funcionalidades (similar a fachadas)

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:

PHP:
  1. Configure::write('Routing.admin', 'admin');

En el controlador:

PHP:
  1. class UsuariosController extends AppController
  2. {
  3. var $layout = 'usuarios';
  4. function admin_listar(){ //Comandos}
  5. function listar(){ //Comandos }
  6. }

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:

PHP:
  1. class AppController extends Controller
  2. {
  3. function beforeFilter()
  4. {
  5. if (isset($this->params['action']) && strstr($this->params['action'], 'admin_'))
  6. {
  7. $this->layout = 'admin/'.$this->layout;
  8. }
  9. // O bien, comparando una variable que se almacena en <em>$this->data</em>:
  10. if (isset($this->params['admin']) && $this->params['admin']==1)
  11. {
  12. $this->layout = 'admin/'.$this->layout;
  13. }
  14. // La última posibilidad es comparando la variable <em>prefix</em> de <em>$this->data</em>:
  15. if (isset($this->params['prefix'])&& $this->params['prefix']=='admin')
  16. {
  17. $this->layout = 'admin/'.$this->layout;
  18. }
  19. }
  20. }

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.

Escribir una respuesta