Sunteți pe pagina 1din 27

Universidad tecnolgica de Chetumal

Tecnologas de
comunicacin

la

informacin

Desarrollo de aplicaciones
Manual Cakephp

pg. 1

Contenido
Introduccin...................................................................................................... 3
Qu es CakePHP? y Por qu usarlo? ......................................................... 3
Entendiendo el Modelo - Vista Controlador ................................................ 3
La capa del Modelo .......................................................................................... 3
La capa de la Vista ........................................................................................... 4
La capa del Controlador .................................................................................. 4
Instalacin......................................................................................................... 4
Descargar CakePHP ......................................................................................... 5
Permisos ........................................................................................................... 5
Configuracin ................................................................................................... 6
Usando una misma instalacin de CakePHP para mltiples aplicaciones . 7
Produccin........................................................................................................ 7
Configurando la Base de Datos ...................................................................... 8
Desarrollo de una aplicacin en cakephp ...................................................... 9

pg. 2

Introduccin
Este manual asume que tienes una comprensin general de PHP y un
conocimiento bsico de programacin orientada a objetos (POO). Las
diferentes funcionalidades que este framework posee hace uso de teconolgas
como SQL, JavaScript y XML y este manual no trata de explicarlas, sino slo la
forma en que se utilizados en su contexto.
Qu es CakePHP? y Por qu usarlo?
CakePHP es un famework, libre, de cdigo abierto, para el desarrollo rpido de
aplicaciones para PHP.
Es una estructura fundamental para la ayudar a los programadores a crear
aplicaciones web. Nuestro objetivo principal es permitirte trabajar de forma
estructurada y rpida y sin prdida de flexibilidad. CakePHP pone tu
disposicin todas las herramientas que necesita para empezar a programar lo
que realmente hay que hacer: la lgica especfica de tu aplicacin. En lugar de
reinventar la rueda cada vez que te sientas a hacer un nuevo proyecto, obten
una copia de CakePHP y empieza con el verdadero corazn de tu aplicacin.
CakePHP tiene un equido de desarollo activo7 y una comunidad muy viva, lo
que le da un gran valor al proyecto. Adems de no tener que reinventar la
rueda, usar CakePHP significa que el ncleo de la aplicacin estar bien
probado y est siendo constantemente mejorado.
Entendiendo el Modelo - Vista Controlador
CakePHP sigue el patrn diseo de software llamado MVC. Programar usando
MVC separa tu aplicacin en tres partes principalmente:

La capa del Modelo


El modelo representa la parte de la aplicacin que implementa la lgica de
negocio. sto significa que es responsable de la recuperacin de datos
convirtindolos en conceptos significativos para la aplicacin, as como su
procesamiento, validacin, asociacin y cualquier otra tarea relativa a la
manipulacin de dichos datos.
A primera vista los objetos del modelo puede ser considerados como la primera
capa de la interaccin con cualquier base de datos que podra estar utilizando
tu aplicacin. Pero en general representan los principales conceptos en torno a
los cuales se desea implementar un programa.

pg. 3

En el caso de una red social, la capa de modelo se hara cargo de tareas tales
como guardar datos del usuario, el amacenamiento de asociaciones con
amigos, el almacenamiento y la recuperacin de fotos de los usuarios,
encontrar sugerencias de nuevos amigos, etc. Mientras que los objetos del
modelo pueden ser considerados como Amigo, Usuario, Comentario y
Foto.

La capa de la Vista
La vista hace una presentacin de los datos del modelo estando separada de
los objetos del modelo. Es responsable del uso de la informacin de la cual
dispone para producir cualquier interfaz de presentacin de cualquier peticin
que se presente.
Por ejemplo, como la capa de modelo devuelve un conjunto de datos, la vista
los usara para hacer una pgina HTML que los contenga. O un resultado con
formato XML para que otras aplicaciones puedan consumir.
La capa de la Vista no se limita nicamente a HTML o texto que represente los
datos, sino que puede ser utilizada para ofrecer una amplia variedad de
formatos en funcin de sus necesidades tales como videos, msica,
documentos y cualquier otro formato que puedas imaginar.
La capa del Controlador
La capa del controlador gestiona las peticiones de los usuarios. Es responsable
de responder la informacin solicitada con la ayuda tanto del modelo como de
la vista.
Los controladores pueden ser vistos como administradores cuidando de que
todos los recursos necesarios para completar una tarea se deleguen a los
trabajadores ms adecuados. Espera peticiones de los clientes, comprueba su
validez de acuerdo a las normas de autenticacin o autorizacin, delega la
bsqueda de datos al modelo y selecciona el tipo de respuesta ms adecuado
segn las preferencias del cliente. Finalmente delega este proceso de
presentacin a la capa de la Vista.

Instalacin
CakePHP se instala de forma fcil y rpidamente. Los requisitos mnimos son:
un servidor web y una copia de los archivos de CakePHP Eso es todo! Aunque
este manual se centra en la configuracin de Apache, ya que es el servidor
web ms comn, se puede configurar CakePHP para que funcione en otros
servidores como LightHTTPD o Microsoft IIS.
pg. 4

Vamos a preparar el proceso de instalacin, que consta de los siguientes


pasos:
Descargar copia de CakePHP
Configurar el servidor web para que use PHP
Comprobar que los permisos de ficheros y carpetas son correctos

Descargar CakePHP
Hay dos opciones: descargar un archivo comprimido con todo el cdigo
(zip/tar.gz/tar.bz2) de la web oficial o realizar un checkout del cdigo
directamente desde el repositorio de git.
Para descargar la ltima versin estable, puedes vistar la pgina oficial
http://cakephp.org y pichar en la opcin Download Now.
Adems, todas las versiones de CakePHP estn hospedadas en Github1.
Github almacena tanto el cdigo de CakePHP como muchos otros plugins para
el sistema. Las versiones release de CakePHP estn disponibles aqu Github
tags2.
Tambin se puede obtener la ltima versin, con las ltimas correcciones de
errores y mejoras de ltima hora (o al menos en ese da). Para ello puedes
clonar el repositorio. Github3.
https://github.com/cakephp/cakephp

Permisos
CakePHP usa el directorio /app/tmp para varias cosas, como guardar las
descripciones de los modelos, la cache de las vistas y la informacin de sesin
de los usuarios.
Por ello debes, asegrarte de que el directorio /app/tmp de tu instalacin de
CakePHP puede ser escrito por el usuario que ejecuta tu servidor web. Ten en
cuenta que cuando tu servidor web se inicia, define un usuario como propietario
del servicio. Este usuario suele llamarse apache o www-data en algunas
versiones de sistemas *nix. Por lo tanto la carpeta /app/tmp debe tener
permisos de escritura para que el usuario propietario del servidor web pueda
escribir dentro de ella.

pg. 5

Configuracin
Configurar CakePHP es tan sencillo como copiar la carpeta en la carpeta raz
de tu servidor web (documentroot) o tan complejo y flexible como quieras para
que se adapte a tu sistema. En esta seccin cubriremos los 3 modos ms
frecuentes: desarrollo, produccin, avanzado.
Desarrollo: fcil y rpido. Las URL de tu aplicacin incluyen la carpeta de
instalacin de CakePHP.
Es menos seguro.
Produccin: Requiere poder cambiar el document root de su servidor web,
proporciona URL amigables y es muy seguro.
Avanzado: Te permite colocar la carpeta de CakePHP en otras partes de tu
sistema de archivos, posiblemente para compartir el ncleo con varias
aplicaciones web basadas en CakePHP.

Desarrollo
Instalar CakePHP para desarrollo es el mtodo ms rpido de empezar. Este
ejemplo te ayudar a instalar una aplicacin CakePHP y configurarla para que
se accesible desde http://www.example.com/cake_2_0/.
Asumiremos que tu document root (la carpeta raz de tu servidor web) es
/var/www/html.
Descomprime los contenidos del archivo que contiene CakePHP en la carpeta
/var/www/html. Ahora tendrs un nuevo directorio con el nombre de la versin
que te has descargado (por ejemplo cake_2.0.0).
Cambia el nombre de este directorio a algo ms sencillo, por ejemplo a cake20.
La estructura de directorios debera ser ahora similar a esta:

/var/www/html
/cake20
/app
/lib
/vendors
/plugins
/.htaccess
/index.php
/README

pg. 6

Si la configuracin de tu servidor web es correcta, ahora podrs acceder a tu


aplicacin accediendo a: http://localhost/cake20 .

Usando una misma instalacin de CakePHP para mltiples aplicaciones


Si ests desarrollando varias aplicaciones a la vez, muchas veces tiene sentido
compartir la misma versin del ncleo de CakePHP. Hay varias formas de
conseguirlo. Una de las ms sencillas es usar la directiva PHP include_path.
Para empezar, clona CakePHP en un directorio. Por ejemplo, en
/home/mark/projects:
git clone git://github.com/cakephp/cakephp.git /home/mark/projects/cakephp
Este comando clonar CakePHP en tu directorio /home/mark/projects. Si no
quieres usar git, puedes descargar el archivo zip del repositorio, todos los
dems pasos sern los mismos. Lo siguiente es modificar el archivo de
configuracin de PHP php.ini. En sistemas *nix, este archivo suele estar
ubicado en la ruta /etc/php.ini, pero puedes localizarlo fcilmente mediante el
comando php -i, busca la ruta bajo el epgrafe Loaded Configuration File.
Cuando hayas localizado el fichero correcto, modifica el parmetro
include_path y aade el directorio /home/mark/projects/cakephp/lib. Ejemplo:
include_path = .:/home/mark/projects/cakephp/lib:/usr/local/php/lib/php
Reinicia el servidor web, deberas ver los cambios aplicados en la salida de
phpinfo().

Produccin
Se llama entorno de Produccin porque es el lugar al que accedern los
usuarios finales de la aplicacin web. Una instalacin en Produccin es una
forma ms flexible de configurar CakePHP. Usando este mtodo permite que
un dominio completo acte como una nica aplicacin CakePHP. El siguiente
ejemplo permitir ayudar a instalar CakePHP en cualquier parte del sistema de
archivos y tener la aplicacin disponible en http://www.example.com. Ten en
cuenta que esta instalacin requiere que tengas permiso de escritura en el
directorio raz de tu servidor web document root.

pg. 7

Descomprime los contenidos del paquete que has descargado con la ltima
versin de CakePHP en el directorio que prefieras. No es necesario que sea
una carpeta de tu document root. Por ejemplo vamos a suponer que quieres
tener tus archivos de CakePHP en la ruta /cake_install. Tu sistema de archivos
sera entonces:

/cake_install/
/app
/webroot (este directorio es el que configuraremos como DocumentRoot
en el servidor web
/lib
/vendors
/.htaccess
/index.php
/README

Si usas Apache, ahora es el momento de configurar la directiva de


configuracin DocumentRoot de tu servidor web para que apunte a la carpeta
/app/webroot de tu instalacin. DocumentRoot /cake_install/app/webroot

Configurando la Base de Datos


vamos a decirle a CakePHP dnde est la Base de Datos y cmo conectarnos
a ella. Probabmente sta ser la primera y ltima vez que lo hagas en cada
proyecto. Hay un fichero de configuracin preparado para que slo tengas que
copiarlo y modificarlo con tu propia configuracin. Cambia el nombre del fichero
/app/Config/database.php.default por /app/Config/database.php (hemos
eliminado el .default del final). Edita ahora este fichero y vers un array
definido en la variable $default que contiene varios campos. Modifica esos
campos para que se correspondan con tu configuracin actual de acceso a la
Base de Datos.
Debera quedarte algo similar a esto:
public $default = array(
datasource => Database/Mysql,
persistent => false,
host => localhost,
port => ,
login => cakeBlog,
password => c4k3-rUl3Z,
database => cake_blog_tutorial,
pg. 8

schema => ,
prefix => ,
encoding =>
);

Ten en cuenta que los campos login, password, database tendrs que
cambiarlos por tu usuario de MySQL, tu contrasea de MySQL y el nombre que
le diste a la Base de Datos.
Guarda este fichero.
Ahora ya podrs acceder a la pgina inicial de bienvenida de CakePHP en tu
mquina. Esta pgina podrs accederla normalmente en
http://localhost/cakeblog si has llamado a la carpeta raz del proyecto
cakeblog.
Vers una pgina de bienvenida que muestra varias informaciones de
configuracin y te indica si tienes correctamente instalado CakePHP

Desarrollo de una aplicacin en cakephp


Pantalla de bienvenido

view
<!-- Main jumbotron for a primary marketing message or call to action -->
<div class="jumbotron">
<h1>Bienvenido</h1>

pg. 9

<p>Este es una aplicacion para el control de cuota de pagos de un


sindicato de choferes, la cual tambien controla los nuevos registros de los
agremiados. </p>
<p>
Mdulo de altas y bajas

View
<div class="page-header">
<h1></h1>
</div>
<div class="page-header">

<h2> Altas y bajas de usuario</h2>


<div class="col-md-12">
<table class="table table-striped">
<tr>
<td>Id</td>
<td>Nombre</td>
<td>Apellido</td>
<td>Detalle</td>
<td>Editar</td>
<td>Eliminar</td>
</tr>
<?php foreach($taxistas as $taxista):?>
pg. 10

<tr>
<td><?php echo $taxista['Taxista']['id'];?></td>
<td><?php echo $taxista['Taxista']['nombre'];?></td>
<td><?php echo $taxista['Taxista']['apellido'];?></td>

<td><?php echo $this->Html->link('Detalle', array('controller' =>


'taxistas', 'action' => 'ver', $taxista['Taxista']['id']), array('class'=>'btn btn-sm btnprimary'));?></td>

<td><?php echo $this->Html->link('Editar', array('controller' => 'taxistas',


'action' => 'editar', $taxista['Taxista']['id']), array('class'=>'btn btn-sm btnsuccess')); ?></td>
<td><?php echo $this->Form->postLink('Eliminar', array('action' =>
'eliminar', $taxista['Taxista']['id']), array('class' => 'btn btn-sm btn-danger'),
array('confirm' => 'Eliminar a'.$taxista['Taxista']['nombre'].'?'))?></td>
</tr>

<?php endforeach; ?>


</table>
</div>
</div>

Controller
<?php
class TaxistasController extends AppController
{
public $helpers = array('Html','Form', 'Time');
public $components = array('Session');

pg. 11

public function index()


{
$this -> set('taxistas', $this->Taxista->find('all'));
}

public function ver($id = null)


{
if (!$id)
{
throw new NotFoundException('Datos Invalidos');
}
$taxista = $this->Taxista->findById($id);

if (!$taxista)
{
throw new NotFoundException('El taxista no existe');
}
$this->set('taxista', $taxista);

public function nuevo()


{
if ($this->request->is('post'))
{
$this->Taxista->create();
if ($this->Taxista->save($this->request->data))
{
$this->Session->setFlash('Ha sido creado un nuevo
taxista', 'default', array('class'=>'success'));
return $this->redirect(array('action' => 'index'));
pg. 12

$this->Session->setFlash('No se puede crear el nuevo


taxista');
}
}

public function editar($id = null)


{
if(!$id)
{
throw new NotFoundException("datos invalidos");
}
$taxista = $this->Taxista->findById($id);

if(!$taxista)
{
throw new NotFoundException("El taxista no ha sido
encontrado");
}

if($this->request->is('post', 'put'))
{
$this->Taxista->id = $id;

if($this->Taxista->save($this->request->data))
{
$this->Session->setFlash('El Taxista a sido editado',
$element =
'default', $params =
array('class' => 'success'));
pg. 13

return $this->redirect(array('action' => 'index'));


}
$this->Sesson->setFlash('El registro no pudo ser editado');
}

if(!$this->request->data)
{
$this->request->data = $taxista;
}
}
public function eliminar($id)
{
if($this->request->is('get'))
{
throw new MethodNotAllowedException('Incorrecto');
}
if($this->Taxista->delete($id))
{
$this->Session->setFlash('el taxista se a eliminado',
$element = 'default', $params = array('class' => 'success'));
return $this->redirect(array('action' => 'index'));
}
}
}
?>

pg. 14

Mdulo de nuevo taxista

View
<div class="page-header">
<h1></h1>
</div>
<h2>Crear Taxista</h2>

<?php echo $this->Form->create('Taxista');?>


<br>
<?php echo $this->Form->input('numeroTx');?>
</br>
<?php echo $this->Form->input('nombre');?>
<br>
<?php echo $this->Form->input('apellido');?>
</br>
pg. 15

<?php echo $this->Form->input('telefono');?>


<br>
<?php echo $this->Form->end('Crear taxista');?>
</br>

<?php echo $this->Html->link('Volver al menu altas y bajas', array('controller' =>


'taxistas', 'action' => 'index'));?>
Model
public $validate = array(
'numeroTx' => array('notEmpty' => array('rule' =>
'notEmpty'), 'numeric' => array('rule' => 'numeric', 'message' => 'solo numeros'),
'unique' => array('rule' => 'isUnique', 'message' => 'El numeroTx ya existe en la
base de datos'),),
'nombre' => array('rule' => 'notEmpty'),
'apellido' => array('rule' => 'notEmpty'),
'telefono' => array('notEmpty'=>array('rule'=> 'numeric',
'message'=>'solo numeros'))
);

public $hasMany = array(


'Pago' => array(
'className' => 'Pago',
'foreignKey' => 'taxista_id',
'conditions' => '',
'order' => 'Pago.semana DESC',
'depend' => false
)
);
}
?>

Controller
pg. 16

public function nuevo()


{
if ($this->request->is('post'))
{
$this->Taxista->create();
if ($this->Taxista->save($this->request->data))
{
$this->Session->setFlash('Ha sido creado un nuevo
taxista', 'default', array('class'=>'success'));
return $this->redirect(array('action' => 'index'));

$this->Session->setFlash('No se puede crear el nuevo


taxista');
}
}

pg. 17

Mdulo de pago

View
<div class="page-header">
<h1></h1>
</div>
<h2>Nuevo pago</h2>

<?php echo $this->Form->create('Pago');?>


<br>
<?php echo $this->Form->input('semana');?>
</br>
<?php echo $this->Form->input('pagoSemanal');?>
<br>
pg. 18

<?php echo $this->Form->input('detalle', array('rows' => 3));?>


</br>
<?php echo $this->Form->input('taxista_id');?>
<br>
<?php echo $this->Form->end('Realizar registro de pago')?>
</br>

<?php echo $this->Html->link('Volver a ultimos movimientos de pago',


array('controller' => 'pagos', 'action' => 'index'));?>

Model
<?php
class Pago extends AppModel
{
public $belongsTo = array(
'Taxista' => array(
'className' => 'Taxista',
'foreignKey' => 'taxista_id'
)
);
public $validate = array(
'semana' => array('notEmpty' => array('rule' => 'notEmpty'),
'numeric' => array('rule' => 'numeric', 'message' => 'solo numeros')),

'pagoSemanal' => array('notEmpty' => array('rule' =>


'notEmpty'), 'numeric' => array('rule' => 'numeric', 'message' => 'solo
numeros')),

'detalle' => array('notEmpty' => array('rule' => 'notEmpty')));

pg. 19

}
?>

Controller
<?php class PagosController extends AppController
{
public $helpers = array('Html','Form', 'Time');
public $components = array('Session');

public function index()


{
$this -> set('pagos', $this->Pago->find('all'));
}

public function nuevo()


{
if ($this->request->is('post'))
{
$this->Pago->create();
if ($this->Pago->save($this->request->data))
{
$this->Session->setFlash('El Registro de la cuota de
pago ha sido creado', 'default', array('class' => 'success'));
return $this->redirect(array('action' => 'index'));
}
$this->Session->setFlash('No se pudo gurardar');
}
$taxistas = $this->Pago->Taxista->find('list', array('fields' =>
array('id', 'nombre_completo')));
pg. 20

$this->set('taxistas', $taxistas);
}

public function editar($id = null)


{
if(!$id)
{
throw new NotFoundException("datos invalidos");
}
$pago = $this->Pago->findById($id);

if(!$pago)
{
throw new NotFoundException("El pago no ha sido
encontrado");
}

if($this->request->is('post', 'put'))
{
$this->Pago->id = $id;

if($this->Pago->save($this->request->data))
{
$this->Session->setFlash('El pago a sido editado',
$element =
'default', $params =
array('class' => 'success'));
return $this->redirect(array('action' => 'index'));
}
$this->Sesson->setFlash('El pago no pudo ser editado');
}
pg. 21

if(!$this->request->data)
{
$this->request->data = $pago;
}
$taxistas = $this->Pago->Taxista->find('list', array('fields' =>
array('id', 'nombre_completo')));
$this->set('taxistas', $taxistas);
}

public function eliminar($id)


{
if($this->request->is('get'))
{
throw new MethodNotAllowedException('Incorrecto');
}
if($this->Pago->delete($id))
{
$this->Session->setFlash('el pago a sido eliminado',
$element = 'default', $params = array('class' => 'success'));
return $this->redirect(array('action' => 'index'));
}
}

?>
Model

<?php
class Pago extends AppModel
pg. 22

{
public $belongsTo = array(
'Taxista' => array(
'className' => 'Taxista',
'foreignKey' => 'taxista_id'
)
);
public $validate = array(
'semana' => array('notEmpty' => array('rule' => 'notEmpty'),
'numeric' => array('rule' => 'numeric', 'message' => 'solo numeros')),

'pagoSemanal' => array('notEmpty' => array('rule' =>


'notEmpty'), 'numeric' => array('rule' => 'numeric', 'message' => 'solo
numeros')),

'detalle' => array('notEmpty' => array('rule' => 'notEmpty')));

}
?>

pg. 23

Mdulo de ltimos pagos

View
<div class="page-header">
<h1></h1>
</div>
<div class="page-header">
pg. 24

<h2>Ultimos movimientos de pago</h2>

<?php echo $this->Html->link('Nuevo Pago', array('controller' => 'pagos', 'action'


=> 'nuevo')); ?>

<div class="col-md-12">
<table class="table table-striped">

<tr>
<td>Semana</td>
<td>Pago</td>
<td>Detalle</td>
<td>fecha de pago</td>
<td>Modificado</td>
<td>Usuario</td>
<td>Editar</td>
<td>Eliminar</td>
</tr>

<?php foreach($pagos as $pago):?>


<tr>
<td><?php echo $pago['Pago']['semana'];?></td>
<td><?php echo $pago['Pago']['pagoSemanal'];?></td>
<td><?php echo $pago['Pago']['detalle'];?></td>
<td><?php echo $this->Time->format('d-m-Y ; h:i:A',
$pago['Pago']['created']); ?> </td>
<td><?php echo $this->Time->format('d-m-Y ; h:i:A',
$pago['Pago']['modified']); ?> </td>
<td><?php echo $this->Html->link($pago['Taxista']['nombre'] .' '.
$pago['Taxista']['apellido'], array('controller' => 'taxistas', 'action' => 'ver',
$pago['Taxista']['id']));?> </td>

pg. 25

<td><?php echo $this->Html->link('Editar', array('controller' => 'pagos',


'action' => 'editar', $pago['Pago']['id']), array('class'=>'btn btn-sm btnsuccess'));?> </td>
<td><?php echo $this->Form->postLink('Eliminar', array('action' =>
'eliminar', $pago['Pago']['id']), array('class'=>'btn btn-sm btn-danger'),
array('confirm' => 'Eliminar Pago '.$pago['Pago']['semana'].'?'));?> </td>

</tr>
<?php endforeach; ?>
</table>
</div>
</div>

Model
<?php
class Pago extends AppModel
{
public $belongsTo = array(
'Taxista' => array(
'className' => 'Taxista',
'foreignKey' => 'taxista_id'
)
);
public $validate = array(
'semana' => array('notEmpty' => array('rule' => 'notEmpty'),
'numeric' => array('rule' => 'numeric', 'message' => 'solo numeros')),

'pagoSemanal' => array('notEmpty' => array('rule' =>


'notEmpty'), 'numeric' => array('rule' => 'numeric', 'message' => 'solo
numeros')),

'detalle' => array('notEmpty' => array('rule' => 'notEmpty')));

pg. 26

}
?>

Controller
<?php class PagosController extends AppController
{
public $helpers = array('Html','Form', 'Time');
public $components = array('Session');

public function index()


{
$this -> set('pagos', $this->Pago->find('all'));
}

pg. 27

S-ar putea să vă placă și