Está en la página 1de 22

2013

Gua de CakePhp
Manual sobre cmo implementar el framework CakePhp
Aqu se darn pautas generales sobre como iniciar en CakePhp, as de cmo hacer para crear controladores, modelos, vistas, configurar el framework y crear servicios web

Jorge Andrs Moreno Jaimes 24/09/2013

Contenido
Descargar CakePhp.............................................................................................................................. 3 Instalar CakePhp.................................................................................................................................. 3 Configurar CakePhp:............................................................................................................................ 4 Configuraciones de seguridad: ........................................................................................................ 5 Security.salt: ................................................................................................................................ 5 Security.cipherSeed:.................................................................................................................... 5 Configurar Base Datos: .................................................................................................................... 6 Caractersticas de CakePhp: .............................................................................................................. 10 Convenios de nombres:................................................................................................................. 10 Modelos: ....................................................................................................................................... 10 Consultas a la base de datos: .................................................................................................... 11 Find (tipo, parmetros): ........................................................................................................ 11 FindBy<Campo> (valor): ........................................................................................................ 12 Query(sql): ............................................................................................................................. 12 Almacenamiento de informacin:............................................................................................. 13 Save(data): ............................................................................................................................ 13 Eliminacin de Informacin: ..................................................................................................... 13 Del(id): ................................................................................................................................... 13 Controladores:............................................................................................................................... 14 Pasar datos a la vista: ................................................................................................................ 14 Set(nombre,valor): ................................................................................................................ 14 Vistas: ............................................................................................................................................ 15 Desarrollo de una Aplicacin: ........................................................................................................... 16 Base de datos ................................................................................................................................ 16 Modelos: ....................................................................................................................................... 16 Controladores:............................................................................................................................... 17 Vistas: ............................................................................................................................................ 17 Controladores de la Aplicacin ......................................................................................................... 18 EstudiantesController: .................................................................................................................. 18 Index: ......................................................................................................................................... 18 Add: ........................................................................................................................................... 19

Edit: ........................................................................................................................................... 20 Remove: .................................................................................................................................... 21

Descargar CakePhp
Para poder empezar con CakePhp, debemos ir a la pgina oficial y descargar la ltima versin. Vamos a http://cakephp.org/ y damos clic en la zona seleccionada

Esperamos que la descarga finalice

Instalar CakePhp
Despus de descargar CakePhp, descomprimimos la carpeta en nuestro servidor, quedndonos la siguiente estructura:

Una vez descomprimido, podemos ir a la direccin de la pgina para comprobar si quedo bien la instalacin.

Como se ve en la imagen, muestra algunos errores, pero esto es debido a que nos falta configurar el CakePhp para que todo ande bien. Si la pgina no les carga o les muestra algo como esto:

Asegrense de haber escrito la direccin bien, y de haber descomprimido en el servidor. Si no saben cmo instalar un servidor, o como hacer pruebas, pueden ver la siguiente gua.

Configurar CakePhp:
Tras haber instalado el CakePhp, ahora procederemos a configurar algunas opciones bsica de seguridad y conectividad a la base de datos.

Configuraciones de seguridad:
Security.salt: Para realizar esto abriremos el archivo core.php que se encuentra en la ruta app/Config/core.php

Buscamos la lnea que contiene el siguiente texto: Configure::write('Security.salt',textolargo), es algo como la imagen que sigue

Cambiamos el valor que tena por defecto, por alguno de nuestro gusto.

Security.cipherSeed:

Buscamos en el mismo archivo el siguiente texto: Configure::write('Security.cipherSeed', 'numero');, es algo como la imagen que sigue

Cambiamos el valor que tena por defecto, por alguno de nuestro gusto, pero en este caso, solo sern nmeros.

Luego, guardamos, y recargamos la pgina, y podremos ver que dichas advertencias han desaparecido

Configurar Base Datos:


Copiamos el archivo app/config/database.php.default , y lo pegamos en la misma carpeta

Ahora renombramos el archivo copiado anteriormente por database.php

Nos quedara algo como lo que sigue

Abrimos el archivo database.php y buscamos el siguiente cdigo

En donde modificaremos los parmetros necesarios para nuestra base de datos. Los datos a modificar se describen a continuacin: Datasource: Es el driver para conectar a la base de datos

Persistent: Si la conexin a la base de datos va a ser persistente. Las conexiones persistentes son enlaces que no se cierran cuando la ejecucin del script termina. Host: Es la url donde se encuentra el host o la direccin ip del host de la base de datos. Login: El usuario para acceder a la base de datos. Password: La contrasea del usuario escrito en Login. Database: El nombre de la base de datos a consultar. Prefix: Si las tablas traen algn prefijo, por default est vaco.

Quedando, en este ejemplo as:

Guardamos los cambios y recargamos la pgina y veremos que una notificacin ha desaparecido

Caractersticas de CakePhp:
Convenios de nombres:
CakePhp, nos va a facilitar muchas tareas si seguimos algunos parmetros que ellos establecieron (dichas ventajas se vern ms adelante al momento de realizar consultas a la base de datos). Las convenciones ms importantes se listan a continuacin. Los nombre de las tablas en la base de datos deben ir en plural, ejemplo: posts, noticias, carros, usuarios, etc. Las tablas deben tener una columna obligatoria que ser la PrimariKey, que es de tipo numrico y debe llamarse id Los nombres de los controladores deben empezar en mayscula y el nombre debe ser el plurar de la tabla y terminar en Controller, ejemplo: Nombre Controlador Nombre de la Tabla PostsController posts NoticiasController noticias CarrosController carros UsuariosController usuario Los nombres de los modelos es el singular de la tabla y empiezan con mayscula, ejemplo Nombre Modelo Post Noticia Carro Usuario Nombre Controlador PostsController NoticiasController CarrosController UsuariosController Nombre Tabla posts noticias carros usuario

Modelos:
Los modelos de la aplicacin se localizan en la carpeta app/Model y respetando los convenios explicados con anterioridad. Los modelos son los que nos permite interactuar con la base de datos, realizar consultas (select), actualizaciones de campos (update), borrado de registros (delete).

Para crear un Modelo debemos crear el archivo con las convenciones descritas con anterioridad, terminado en php. Para ejemplificar crearemos un modelo de la tabla estudiantes.

Dentro del documento, se crea una clase PHP del mismo nombre del archivo que hereda de la clase AppModel

Consultas a la base de datos: Lo interesante de los modelos de CakePhp, es que al heredar de la clase AppModel, trae consigo unas funciones que nos facilitaran mucho la vida, y nos permitirn realizar las consultas ms comunes sin escribir una sola lnea de sql. Find (tipo, parmetros): Esta funcin nos permite realizar consultas a la base de datos, paramndole dos parmetros: 1. Tipo: Tipo all

firts

count

Descripcin Busca todos los registros de la tabla, cumpliendo las condiciones declaradas en el vector parmetros Devuelve el primer registro encontrado en la tabla, cumpliendo las condiciones declaradas en el vector parmetros Nos devuelve la cantidad de registro que hay en la base de datos, cumpliendo las condiciones declaradas en el vector parmetros

Para encontrar ms informacin sobre este parmetro y todo los valores que puede tomar, pueden ir a la documentacin oficial 2. Parmetros: Este es un vector opcional, que se le puede pasar a la funcin Find, dicho vector tiene el siguiente esquema:

array( 'conditions' => array('Tabla.Campo' => $valor), 'recursive' => 1, 'fields' => array('Tabla.Campo1', 'Tabla.Campo2'), 'order' => 'Tabla.Campo ', 'group' => array('Tabla.Campo1'), 'limit' => n, 'page' => n ) En donde: o o o o o Conditions: Es un vector que contendr las condiciones de la consultas, estas condiciones son aquellas que en sql irn despus de la clusula WHERE. Fields: Es un vector donde se especifican en los campos que retornara la consulta, estos campos son los que se declaran en sql despus de la clusula SELECT. Order: Es el elemento por el cual se ordenara la consulta, en sql es la columna que va despus de la clusula ORDER BY Group: Es un vector donde se especifican los elementos a agrupar. Limit: Es un valor para determinar cuntos registros sern devueltos

Si desea consultar informacin adicional de todos los elementos del array parmetros, no dude en consultar la documentacin oficial. FindBy<Campo> (valor): Estas funciones nos permiten buscar en nuestras tablas aquellas cuyo valor de campo coincida con el dado como parmetro. Si por ejemplo tenemos una tabla estudiantes con 3 campos (id, nombre, apellido), podremos usar esta funcin de la siguiente manera: CakePhp this->Estudiante->findById(3) this->Estudiante->findByNombre(Oscar) this->Estudiante->findByApellido(Perez) Sql Select * from estudiantes where id=3 Select * from estudiantes where nombre=oscar Select * from estudiantes where apellido=perez

Ntese, como ahorramos cdigo de una manera sorprendente, pues esas funciones, no las debemos de crear, solamente se implementan y nos ahorran una cantidad grande de cdigo.

Query(sql): Esta funcin ser llamada, cuando una consulta sql sea tan compleja, que no pueda ser solucionada por las anteriores funciones. Hay escribiremos el cdigo sql que deseemos, ejemplo $this->Estudiante->query("SELECT * FROM estudiantes LIMIT 2;");

Almacenamiento de informacin: Save(data): Para guardar informacin en la base de datos, debemos llamar a la funcin sabe de nuestro modelo y esta funcin recibe como parmetro un array con los datos a almacenar. Array ( [NombreTabla] => Array ( [nombrecampo1] => 'valor' [nombrecampo2] => 'valor' ) ) Pero si estamos enviamos es datos de un formulario, desde una pgina web, esto no nos debe preocupar, pues con el simple hecho de llamar a la variable data ($this->data), tendremos todos los datos del formulario ya ingresados en un vector.

Eliminacin de Informacin: Del(id): Esta funcin se encarga de eliminar aquel registro cuyo campo id concuerde con el parmetro recibido CakePhp this->Estudiante->del(3) Sql Delete from estudiantes where id=3

Para obtener ms informacin sobre mtodos de eliminacin de datos, pueden consultar la documentacin oficial

Controladores:
Los controladores de la aplicacin se localizan en la carpeta app/Controller y respetando los convenio explicados con anterioridad. Los controladores nos permiten escribir cdigo para interactuar con la base de datos (mediante los Modelos) y la interfaz grfica de nuestra aplicacin (View). Cada controlador tiene en su interior funcin que representan una accin, cada accin tiene asociado una vista, todo esto ser explicado de mejor manera en las siguientes secciones.

Para crear los controladores en la aplicacin, debemos crear un nuevo archivo en la carpeta especificada cuyo nombre seguir los lineamientos de CakePhp y terminara en .php. Para ejemplificar crearemos un modelo de la tabla estudiantes. Dentro del documento, se crear una clase del mismo nombre del archivo que hereda de la clase AppController.

Pasar datos a la vista: Set(nombre,valor): Para pasar datos a la vista, lo que debemos hacer es llamar al mtodo set y pasarle dos parametros, el primero ser el nombre con el cual podr ser accedi los datos desde la vista, y el segundo, son los datos que recibir la vista $this->set("estudiantes",$estudiantes);

Vistas:
Las vistas de la aplicacin se localizan en la carpeta app/View/nombreControlador/accin.ctp. Las vistas son aquellas que nos permite generar cdigo HTML basado en los datos recibido del controlador.

En la imagen anterior se puede apreciar las vistas del controlador HistoriasController, dicho controlador tiene en su interior 4 acciones, las cuales son: index, index2, today e history.

Desarrollo de una Aplicacin:


Base de datos
En esa seccin se desarrollara una aplicacin para inscribir alumnos a unos grupos especficos. La aplicacin cuenta con la siguiente base de datos.

Modelos:
Ahora crearemos 3 modelos para realizar este ejemplo. Los modelos sern:

Estudiante.php EstudiantesGrupo.php Grupo.php

Controladores:
Ahora crearemos 3 controladores para realizar este ejemplo. Los Controladores sern:

EstudiantesController.php EstudiantesGruposController.php GruposController.php

Vistas:
Para las vistas, crearemos tres carpetas dentro de la carpeta View, el nombre de cada carpeta debe ser el mismo del controlador, sin la terminacin Controller, para este ejemplo quedara as: Estudiantes EstudiantesGrupos Grupos.

Controladores de la Aplicacin
EstudiantesController:
En este controlador nos encargaremos de realizar las 4 acciones bsicas: Listar Estudiantes Agregar Estudiantes Editar estudiantes Eliminar Estudiante

Para poder realizar todas estas acciones, crearemos cuatro funciones en el controlador, cada funcin (accin) realizara una tarea especfica Funcin index Accin Listar Estudiante Descripcin Esta funcin se encargara de listar todos los estudiantes registrador en la base de datos, as como proveer links para acceder a las dems acciones del controlador (actualizar, editar, eliminar) Esta funcin se encargara de agregar un nuevo estudiante a la base de datos Esta funcin se encargara de editar un estudiante dado, para actualizar sus datos en la base de datos Esta funcin se encargara de eliminar un estudiante dado, de tal manera que se elimine su registro de la base de datos

add edit remove

Agregar Estudiante Editar Estudiante Eliminar Estudiante

Index: Como se describa con anterioridad, aqu listaremos los estudiante que ya se encuentra en la base de datos, para eso crearemos una funcin en el controlador llamada index. Esta funcin no recibe parmetro alguno. Para poder listar los estudiantes, debemos realizar una consulta a la base de datos, por lo general, lo que haramos, sera establecer un cdigo sql, que luego ejecutaramos y recorreramos, para luego poderlo pintar. El cdigo sql que crearamos sera algo como: select * from estudiantes Pero gracias a las facilidades (y siguiendo las convenciones de CakePhp) no debemos realizar todo ese trabajo completo; lo nico que debemos hace es lo siguiente: $this->Estudiante->find("all");

Ahora lo que debemos hacer, es pasar toda esa informacin a la vista. $this->set("estudiantes",$this->Estudiante->find("all"));

Quedando la funcin de la siguiente manera

Add: Esta funcin se encargara de recibir datos de un estudiante desde un formulario web e insertarlo en la base de dato. Para poder realizar esto, la funcin verificara si se estn enviando datos desde un formulario web, si esto es correcto, intentara almacenar los datos en la base de datos y mostrara un mensaje de confirmacin, en caso contrario, mostrara un mensaje de error.

Para obtener todos los datos de un formulario se usa el atributo data de la clase $this->data Para almacenar los datos en la base de datos, se usa la funcin save del modelo, pasando los datos del formulario. $this->Estudiante->save($this->data) Para mostrar un mensaje en la vista, usamos la funcin SetFlash de la sesin. $this->Session->setFlash('Estudiante almacenado con exito.', 'default', array(), 'good');

Quedando la funcin de la siguiente manera

Edit: Esta funcin se encargara, que dado un id de un estudiante (recibido como parmetro), buscara su informacin y la mostrara en un formulario web para que el estudiante la pueda modificar. Al momento del cliente enviar el formulario, la informacin se enviara a la base de datos para actualizar el registro. Al finalizar, se le mostrara un mensaje al usuario notificando el resultado de la operacin.

Al igual que en la accin anterior (add), se verifica si se estn enviando datos desde la vista (primer condicional).
$this->Estudiante->id = $id;

Se actualiza el id en el modelo, con el fin de indicarle cual fila se va a actualizar.


$this->Estudiante->save($this->data)

Actualiza todos los campos que le llegaron del formulario

Remove: Esta funcin recibir un parmetro, el cual es el id del estudiante a eliminar. Al finalizar, se le mostrara un mensaje al usuario notificando el resultado de la operacin.

$this->Estudiante->delete($id)

En este caso se isa la funcin delete del modelo para poder eliminar un registro de la base de datos, el registro a eliminar ser aquel cuyo id sea igual al recibido como parmetro.