Cuando pedimos una URL de una aplicación CakePHP, en el clásico formato /controlador/acción, es el controlador el que la recibe, prepara lo necesario y ejecuta la acción.
La fase de preparación consiste en "averiguar" lo que ha pasado ahí fuera, en el mundo de los usuarios, y poner esa información a disposición de la acción de una manera estructurada.
Básicamente, lo que el controlador mira son dos cosas:
- Los datos que hayan sido recogidos en un formulario y enviados mediante POST (normalmente). Los encontrarás en Controller::data
- Los argumentos que hayan sido pasados por la URL. Los encontrarás en el array Controllers::passedArgs
Datos de formulario
Si el usuario ha rellenado un formulario y apretado el botón Submit, Controller::data será poblado por los datos de Post. Nuestra acción tendrá entonces que detectar esta situación y abrir dos "modos" de trabajo según haya datos para procesar el formulario o no.
Habitualmente, si no hay datos la acción tendrá que mostrar el formulario adecuado.
Lo anterior establece algo así como dos "modos" de la acción: uno de postproceso de formulario y otro de preparación del mismo.
Argumentos pasados
Dentro de cada uno de los modos anteriores, los argumentos pasados por URL nos sirven para modular el comportamiento concreto de la acción. Por ejemplo, en el típico caso de una acción edit, normalmente pasamos un argumento con el id del registro que queremos editar. Por lo tanto, nuestra lógica será:
- Si tenemos datos del formulario se trata de una actualización y hay que tratar de guardar los datos nuevos en el registro con el id indicado.
- Si no tenemos datos del formulario, se trata de cargar el registro cuyo id se nos ha pasado y poner un formulario ya cubierto con esos datos para que el usuario los modifique.
Lo que hace es mapear estos argumentos de la URL en los argumentos que hayamos definido para nuestra acción. En cierto modo, esto nos define la estructura de la URL. Por ejemplo:
function accion ($id, $title= false)
espera una URL de la forma:
/controlador/accion/12/ejemplo
/controlador/accion/15
El argumento id sería obligatorio y title opcional.
Los argumentos que no sean específicos podemos leerlos en Controller::passedArgs, que es un alias a Controller::params[pass] (y a Controller::passed_Args, por cierto).
Una url con argumentos tiene la forma
/controller/accion/12/pagina:5/ordenar:id/
En este caso 12, seria pasado como argumento a la acción "accion", mientras que encontraríamos pagina y ordenar en el array Controller::passedArgs.
Por supuesto, hay muchas variedades de acciones. No todas ellas tienen que lidiar con formularios, algunas solo van a presentar un contenido estático, etc. Pero básicamente todas siguen un mismo esquema:
- Compobar si hay información procedente de ciertas fuentes (argumentos, formulario)
- Si hay información, ver qué tengo que hacer con ella y presentarla al usuario
- Si no hay información, presentar una vista que la solicite al usuario
1 comentario:
Hola,
Estoy navegando por tu blog y te felicito por él porque me está haciendo ahora la vida más fácil, y creo que más adelante también.
No sé usar mucho blogger, y no encontraba otro espacio donde escribirte esto, Fran: gracias por este trabajo y mucha suerte en todos tus proyectos.
Hace no mucho tuve la idea de hacer algo así en www.tutorialcakephp.wordpress.com. Espero que con el paso del tiempo se parezca en algo a esto.
¡Un saludo!
Publicar un comentario