UNIVERSIDAD NACIONAL DEL SANTA
FACULTAD DE INGENIERA
E.A.P. DE INGENIERA DE SISTEMAS E INFORMTICA
FRAMEWORK CAKEPHP
ALUMNO:
- DAZ FLORES MARTN
DOCENTE:
- ING. SUAREZ CAMILO
ASIGNATURA:
- INGENIERIA DE INFORMACIN
CICLO:
- VII
2017
FRAMEWORK CAKEPHP
1. Qu es CakePHP?
Es un framework o marco de trabajo que facilita el desarrollo de aplicaciones
web, utilizando el patrn de diseo MVC (Modelo-vista-controlador), es de
cdigo abierto y se lo distribuye bajo la licencia MIT. El mayor objetivo de
este framework es permitirnos trabajar de forma estructurada, rpida y sin
prdida de flexibilidad.
2. Qu ventajas tengo al trabajar con un framework como CakePHP?
La principal ventaja es el rpido desarrollo web porque existe una integracin
con patrones de diseo (MVC) y esto implica que los desarrolladores no
necesitan gastar el tiempo intentando resolver problemas que siempre
estarn presentes ya que CakePHP ya tiene una solucin anticipada para
solventarlos. De esa forma es que el desarrollador estar siempre centrado
en lo principal de una aplicacin web que es construir una lgica y
funcionalidad especifica acorde a los requerimientos de la aplicacin.
3. Cmo funciona el patrn MVC con CakePHP?
MVC es un patrn de arquitectura de software que separa los datos de una
aplicacin de la interfaz de usuario y de la lgica de dicha aplicacin, de tal
forma se obtiene tres capas distintas: los datos que son los modelos, la lgica
de la aplicacin que se encuentran en los controladores y las interfaces que
son las vistas.
4. Modelos en CakePHP
Cuando hablamos de un modelo en CakePHP nos
referiremos siempre a una tabla de la base de datos en
particular, es decir que cada tabla que componga la
base de datos de la aplicacin debe tener siempre un
modelo que lo represente, este modelo realizar toda la
interaccin con las bases de datos. El modelo tambin
definir relaciones con otros modelos, eso quiere decir que las tablas de las
bases de datos tambin se relacionarn entre s.
5. Controladores en CakePHP
Son los que controlan la lgica de la aplicacin web, este recibir peticiones
y su lgica decidir qu respuesta es la que tiene que generar, generalmente
contendr llamadas a modelos para acceder a los datos si as se requiere
para posteriormente enviar una respuesta que se visualizar mediante las
vistas.
6. Vistas en CakePHP
Las vistas son las salidas de las respuestas que sern enviadas al usuario,
generalmente esto se representa en cdigo HTML y que a su vez contendr
cdigo PHP. Las vistas ser el medio por el cual el usuario interaccione con
la aplicacin web.
Como te habrs dado cuenta usar MVC en CakePHP nos trae muchas
ventajas ayudndonos a estructurar el cdigo en segmentos modulares y
eso permite poder llevar a cabo de una manera ms rpida cualquier cambio
que sea requerido de tal forma que trabajos que a veces llegan a ser ms
tediosos como la depuracin y la modificacin con CakePHP llegan a ser
mucho ms sencillos.
A continuacin, te muestro un esquema de cmo trabajan estas tres capas
en conjunto:
Como puedes observar en el esquema, este sigue una secuencia partiendo
del usuario (Client) que realiza una peticin llegando as al controlador, este
controlador interacta con el modelo para as acceder a los datos, para
finalmente enviar una respuesta que ser entregado al usuario mediante las
vistas.
7. Caractersticas de CakePHP
A parte de todo lo anterior mencionado, CakePHP nos brinda muchas
caractersticas:
Tiene un mnimo de configuracin, con tan solo indicarle la base de datos
a trabajar ya estars listo para comenzar a hornear tus aplicaciones web.
Utiliza bastantes convenciones, si bien CakePHP no necesita de mucha
configuracin, se tiene que seguir una serie de convenciones tanto en
los nombres y localizaciones los cuales siempre tienen que ser
respetados para seguir una lnea de buenas prcticas y as poder sacarle
el mayor provecho a este framework.
CRUD de base de datos integrado, muy til para realizar aplicaciones de
forma instantnea, con esto puedes obtener prototipos para verificar que
tu aplicacin y su estructura de base de datos esta bien desarrollada.
URLs amigables.
Helpers (ayudantes) para AJAX, JavaScript, HTML, formularios y ms.
CakePHP viene con herramientas integradas para la validacin de datos
de entrada, proteccin CSRF, proteccin de la manipulacin de
formularios, la prevencin de inyeccin SQL, XSS, ayudando a mantener
la aplicacin.
Componentes de autenticacin y sesiones.
Almacenamiento en cache.
Scaffolding de las aplicaciones.
Como puedes ver CakePHP trae una variedad de ventajas, es un
framework bastante completo y sobre todo flexible, hace que el
desarrollo web ya no sea tan montono porque ofrece las herramientas
para comenzar a escribir cdigo que realmente necesitas y no estar re
inventando la rueda cada vez que emprendas un nuevo proyecto.
CakePHP es un framework o marco de trabajo que facilita el desarrollo de
aplicaciones web, utilizando el patrn de
diseo MVC (Modelo Vista Controlador). Es de cdigo abierto y se
distribuye bajo licencia MIT.
Al igual que Ruby On Rails, CakePHP facilita al usuario la interaccin con
la base de datos mediante el uso de ActiveRecord. Adems, hace uso
del patrn Modelo Vista Controlador.
Compatible con PHP4 y PHP5
CRUD de la base de datos integrado
URLs amigables
Sistema de plantillas rpido y flexible
Ayudas para AJAX, Javascript, HTML, forms y ms
Trabaja en cualquier subdirectorio del sitio
Validacin integrada
Scaffolding de las aplicaciones
Access Control Lists
Sintetizacin de datos
Componentes de seguridad y sesin
3.6 Componentes
# Introduccin Los componentes son paquetes de lgica que son compartidos
entre los controladores. Si tiene ganas de copiar y pegar cdigo de un
controlador a otro, debera antes considerar agrupar algunas funcionalidades en
un componente. CakePHP incluye un conjunto fantstico de componentes listos
para usar para conseguir ayuda con:
Seguridad
Sesiones
Lista de control de acceso (ACL)
Emails
Cookies
Autenticacin
Manejo de pedidos (Requests)
Cada uno de estos componentes del ncleo (Core) son detallados en su propio
capitulo. Por el momento, veremos cmo crear sus propios componentes. Con
esto ayudar a mantener el cdigo de los controladores limpio y le ser ms
sencillo reusar cdigo entre proyectos.
3.6.1 Configuracin de componentes.
Muchos de los componentes bsicos requieren ser configurados. Algunos
ejemplos de componentes que requieren ser configurados son: Auth, Cookie e
Email. Toda la configuracin de estos componentes y los componentes en
general se hacen en el mtodo del controlador
beforeFilter().
function beforeFilter() {
$this->Auth->authorize = 'controller';
$this->Auth->loginAction = array('controller' => 'users', 'action' =>
'login');
$this->Cookie->name = 'CookieMonster';
}
El cdigo anterior sera un ejemplo de configuracin de las variables de
componente del controlador beforeFilter()
3.6.2 Creando Componentes a medida
Supongamos que nuestra aplicacin online necesita efectuar una compleja
operacin matemtica en muchas partes de la aplicacin. Crearamos un
componente que albergara esa lgica compartida para poder ser usada en
diferentes controladores El primer paso es crear una nueva clase y fichero de
componente. Crea el fichero en /app/controllers/components/[Link]. La
estructura bsica para el componente quedara as.
<?php
class MathComponent extends Object {
function doComplexOperation($amount1, $amount2) {
return $amount1 + $amount2;
}
}?
>
[Link] Aadiendo Componentes a tus Controladores
Una vez finalizado nuestro componente, podemos usarlo en los controladores de
la aplicacin aadiendo su nombre (excepto la parte "Component" al array
$components del controlador. Automticamente, el controlador recibir un nuevo
atributo con un nombre a partir del nombre del componente, a travs del cual
podremos acceder a una instancia del mismo:
/* Hace el nuevo componente accesible en $this->Math,
al igual que el standard $this->Session */
var $components = array('Math', 'Session');
Los componentes declarados en AppController sern combinados con los de tus
otros controladores, as que no hay necesidad de redeclarar el mismo
componente dos veces. Cuando se incluyen Componentes a un Controlador
tambin puedes declarar un conjunto de parmetros que sern pasados al
mtodo intialize() de los Componentes. Estos parmetros pueden ser manejados
por el Componente.
var $components = array(
'Math' => array(
'precision' => 2,
'randomGenerator' => 'srand'
),
'Session', 'Auth'
);
Este cdigo pasara el array conteniendo precision y randomGenerator al mtodo
intialize() de MathComponent como segundo parmetro. Por ahora, esta sintaxis
no est implementada por ninguno de los Componentes Core.
[Link] Acceso a clases MVC dentro de componentes
Para acceder a la instancia del controlador desde tu recin creado componente,
necesitars implementar el mtodo initialize() o el startup(). Estos mtodos
especiales llevan una referencia al controlador como primer parmetro y son
llamados automticamente. El mtodo initialize() es llamado antes del mtodo
beforeFilter(), y el mtodo startup() despus del mtodo beforeFilter. Si por algn
motivo no deseas que el mtodo startup() sea llamado cuando el controlador est
inicializando cosas, dale el valor true a la variable $disableStartup. Si deseas
insertar algn cdigo de lgica antes de que el controlador beforeFilter() sea
llamado, necesitars usar el mtodo initialize() del componente.
<?php
class CheckComponent extends Object {
//llamado antes de Controller::beforeFilter()
function initialize(&$controller) {
// salvando la referencia al controlador para uso posterior
$this->controller =& $controller;
}
//llamado tras Controller::beforeFilter()
function startup(&$controller) {
}
function redirectSomewhere($value) {
// ulizando un mtodo de controlador
$this->controller->redirect($value);
}
}?
>
Tambin podras querer utilizar otros componentes dentro del componente a
medida. Para ello, simplemente crea una variable de clase $components (tal
como lo haras en un controlador) como un array que contenga los nombres de
los componentes que quieres utilizar.
<?php
class MyComponent extends Object {
// Este componente usa todos componentes
var $components = array('Session', 'Math');
function doStuff() {
$result = $this->Math->doComplexOperation(1, 2);
$this->Session->write('stuff', $result);
}
}?
>
No es muy recomendable acceder o usar un modelo en un componente, pero si
tras sopesar las posibilidades eso es lo que quieres hacer, tendrs que instanciar
tu clase modelo y usarla manualmente. Aqu hay un ejemplo:
<?php
class MathComponent extends Object {
function doComplexOperation($amount1, $amount2) {
return $amount1 + $amount2;
}
function doUberComplexOperation ($amount1, $amount2) {
$userInstance = ClassRegistry::init('User');
$totalUsers = $userInstance->find('count');
return ($amount1 + $amount2) / $totalUsers;
}
}?
>
[Link] Usando Componentes en tu Componente
A veces uno de tus componentes puede depender de otro. Si las funcionalidades
que estos componentes proveen no estn relacionados, excepto por su
dependencia el uno del otro, entonces no querrs ponerlos dentro de un solo
componente. En cambio puedes hacer que tu componente sea un "Padre" e
indicarle con el array $components la lista de sus "Hijos". Los componentes
padres se cargan antes que sus componentes hijos, y cada componente hijo
tiene acceso a su padre. Declaracin del padre:
<?php
class PadreComponent extends Object {
var $name = "Padre";
var $components = array( "Hijo" );
function initialize(&$controller) {
$this->Hijo->foo();
}
function bar() {
// ...
}
}
Declaracin del hijo:
<?php
class HijoComponent extends Object {
var $name = "Hijo";
function initialize(&$controller) {
$this->Padre->bar();
}
function foo() {
// ...
}
}