framework cake php

25
Universidad centroamericana Facultad de ciencia, tecnología y ambiente IMPLEMENTACION DE APLICACIONES ORIENTADO A OBJETOS NOMBRES: David Antonio González Blanchard Aura Lila Gutiérrez Tejada Francys Jessenia Gómez Sánchez Ángel Antonio González Oporta Ramces Exequiel Cabezas PROFESOR:

Upload: daviddagb2

Post on 18-Jun-2015

3.241 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: FrameWork Cake PHP

Universidad centroamericanaFacultad de ciencia, tecnología y ambiente

IMPLEMENTACION DE APLICACIONES ORIENTADO A OBJETOS

NOMBRES:

David Antonio González Blanchard Aura Lila Gutiérrez Tejada Francys Jessenia Gómez Sánchez Ángel Antonio González Oporta Ramces Exequiel Cabezas

PROFESOR:

Armando López

INGENIERIA EN SISTEMAS Y TECNOLOGIAS DE LA INFORMACION

FrameWork CakePHP

Introducción

Page 2: FrameWork Cake PHP

CakePHP es un framework (entorno de trabajo) libre y de código abierto para el desarrollo en PHP. Es una estructura de librerías, clases y una infraestructura run-time (en tiempo de ejecución) para programadores de aplicaciones web originalmente inspirado en el framework Ruby On Rails.Su principal meta es permitir su trabajo de manera estructurada y rápida, sin pérdida de flexibilidad.

Características

CakePHP tiene varias características que lo hacen una gran opción como un framework para desarrollo de aplicaciones rápidas y con el menor costo de molestia.

Comunidad activa y amigable Licencia flexible Compatibilidad con PHP4 y PHP5 CRUD integrado para la interacción con la base de datos y las preguntas

simplificadas Scaffolding Arquitectura Modelo Vista Controlador (MVC) Despachador de peticiones con buena vista, URL personalizadas Validación incorporada Plantillas rápidas y flexibles (Sintaxis PHP, con Helpers) Helpers en Vistas para AJAX, Java script, Formularios HTML y mas Seguridad, Sesiones y Componentes para Manejo de Peticiones Lista de Control y Acceso flexible Desinfección de datos Cache flexible en Vistas Trabaja desde cualquier subdirectorio web del sitio, con poca o ninguna

configuración de Apache envuelta

Historia de CakePHP

En 2005, Michal Tatarynowicz escribió una mínima versión de un Framework Rápido para Aplicaciones en PHP. El encontró que ese fue el principio de un muy buen framework. Michal publico el framework bajo la licencia MIT, mezclando Cake, y abriéndose a una comunidad de desarrolladores, quienes ahora mantienen Cake bajo el nombre CakePHP.

Modelo de CakePHP

Cake PHP utiliza el modelo vista-control es un patrón para diseño de software que ayuda a separar lógicamente el código haciéndolo reusable, mantenible y generalmente mejor. La entrada del usuario, el modelado del mundo externo, y la

Page 3: FrameWork Cake PHP

retroalimentación visual para el usuario son separados y dirigidos por los objetos modelo, vista y controlador.

En términos de Cake, El modelo (“Modelo”) representa una base de datos, tabla o registro, así como sus relaciones con otras tablas o registros. Los Modelos (“Models”) contienen las reglas para la validación de datos. Estas reglas son aplicadas cuando en el modelo (“model”) se insertan o actualizan datos. Las vistas en cake están representadas por los archivos “view”, los cuales son archivos de HTML con código PHP incluido. Los controladores (“controllers”) de Cake manejan las peticiones del servidor. Toma las entradas del usuario (URL y datos de POST), aplica la lógica de negocios, utiliza los modelos (“models”) para leer y escribir en base de datos y otras rutas, y manda la salida apropiada de datos con los archivos de vistas (“view”).

Para hacer tan fácil como sea posible la organización de tu aplicación, Cake usa esto no solo para manejar como interactúan los objetos dentro de la aplicación, si no también como son almacenados los archivos.

Descripción de la disposición de archivos de Cake

Cuando se desempaqueta Cake en el servidor se encontraran 3 carpetas principales:

app cake vendors

La carpeta cake es el lugar para las bibliotecas base de Cake La carpeta app es el lugar donde estarán las carpetas y archivos específicos de su aplicación. La separación entre la carpeta cake y la carpeta app hace posible para usted tener muchas carpetas app compartiendo un solo conjunto de bibliotecas de Cake. La carpeta vendors se utiliza para para guardar en ella bibliotecas de terceros.

Requerimientos

Para usar CakePHP usted debe primero tener un servidor que tenga las librerías y programas para correr CakePHP.

Estos son los requerimientos para la puesta en marcha del servidor para corre CakePHP:

1. Un servidor HTTP (como Apache) con lo siguiente habilitado: sesiones, mod_rewrite (no absolutamente necesario, pero preferido).

2. PHP 4.3.2 o superior. Si CakePHP trabaja bien en PHP 4 o 5.

Page 4: FrameWork Cake PHP

3. Un motor de base de datos (ahora, hay soporte para MySQL, PostgreSQL y un envoltorio para ADODB)

Estructura de CakePHP

CakePHP incluye las clases Controlador [Controller], Modelo [Model] y Vista [View], pero también incluye otras clases y objetos que hacen que el desarrollo en MVC sea un poco más rápido y agradable. Los Componentes [Components], Comportamientos [Behaviors], y Ayudantes [Helpers] son clases que proporcionan extensibilidad y reusabilidad; agregan rápidamente funcionalidad a las clases base MVC de las aplicaciones.

Extensiones de los Controladores ("Componentes")

Un componente es una clase que ayuda a la lógica de un controlador. Si tienes alguna lógica y la quieres compartir entre varios controladores (o aplicaciones), un componente suele ser una buena elección. En lugar de escribir lógica en el método de un controlador, puedes empaquetarla en un componente para poder compartirla.

Los Controladores también están equipados con callbacks. Puedes utilizar estos callbacks si necesitas insertar alguna lógica en las operaciones del núcleo de CakePHP. Los Callbacks disponibles incluyen:

beforeFilter(), se ejecuta antes que cualquier otra acción del controlador beforeRender(), se ejecuta después de la lógica del controlador, pero antes

de que la vista se renderice afterFilter (), se ejecuta después de toda la lógica del controlador, incluido el

renderizado de la vista. Puede que no haya ninguna diferencia entre afterRender () y afterFilter (), a menos que hayas llamado manualmente a render () en el controlador y hayas incluido alguna lógica después de esa llamada.

Extensiones de las Vistas

Un ayudante [Helper] es una clase que ayuda a la lógica de una vista. Del mismo modo que varios controladores utilizan un componente, los ayudantes [helpers] hacen que varias vistas accedan y compartan lógica presentacional. Con uno de los ayudantes del núcleo, el AjaxHelper, el manejo de las peticiones Ajax en las vistas es mucho más fácil.

Page 5: FrameWork Cake PHP

La mayoría de las aplicaciones repiten piezas de código en sus vistas. CakePHP facilita la reutilización de este código con diseños [layouts] y elementos [elements]. Por defecto, toda vista renderizada por un controlador se coloca en un diseño [layout].

Los elementos entran en juego cuando hay que reutilizar estos fragmentos pequeños de contenido.

Extensiones de los Modelos

Del mismo modo, los Comportamientos [Behaviors] son formas de añadir funcionalidad común entre los modelos. Por ejemplo, si almacena datos de los usuarios en una estructura de árbol, puede especificar que su modelo de usuario se comporte como un árbol, y obtener libre funcionalidad para eliminar, añadir, y mover nodos en la estructura de árbol subyacente.

Los modelos también cuentan con el apoyo de otra clase llamada DataSource (Origen de datos). Los DataSources son una abstracción que permite a los modelos manipular diferentes tipos de datos en forma consistente. Si bien la principal fuente de datos en una aplicación CakePHP es a menudo una base de datos, puede escribir DataSources adicionales que les permitan a sus modelos representar canales RSS, archivos CSV, entradas LDAP, o eventos iCal. Los DataSources le permiten asociar registros de diferentes fuentes: en lugar de limitarse sólo a uniones [joins] SQL, los DataSources le permiten decirle a su modelo LDAP que está asociado a muchos eventos iCal.

Así como los controladores, los modelos también incluyen callbacks: beforeFind() afterFind() beforeValidate() beforeSave() afterSave() beforeDelete() afterDelete()

Los nombres de estos métodos deben ser lo suficientemente descriptivos para que sepa lo que hacen. Asegúrese de obtener los detalles en el capítulo acerca de los modelos.

Una petición típica de CakePHP

Page 6: FrameWork Cake PHP

El navegador hace una petición a su servidor Web. El enrutador analiza la URL para extraer los parámetros para esta petición: el

controlador, la acción, y cualquier otro argumento(s) que pueda afectar a la lógica de negocio durante esta petición.

Usando las rutas, una petición URL es mapeada a una acción de controlador (un método en una clase de controlador específica). En este caso, es el método comprar () del controlador PastelesController. El callback beforeFilter() del controlador es llamado antes de que cualquier acción lógica del controlador sea ejecutada.

El controlador puede usar modelos para ganar acceso a los datos de la aplicación. Después que el modelo ha obtenido toda la información, ésta es devuelta al

controlador. Pueden activarse callbacks del modelo. El controlador puede usar componentes para refinar aun más los datos o realizar

otras operaciones (manipulación de sesiones, autenticación, o envíos de email, por ejemplo).

Una vez que el controlador ha usado modelos y componentes para preparar suficientemente la información, ésta es entregada a la vista usando el método set() del controlador. Los callbacks de controlador pueden ser aplicados antes de que la información sea enviada. La lógica de vista es ejecutada, la cual puede incluir el uso de elementos y/o ayudantes [helpers]. Por defecto, la vista es creada dentro del diseño [layout].

Callbacks del controlador adicionales (como afterFilter) pueden ser aplicados. El código completo creado por la vista es enviado al navegador.

Desarrollando con CakePHP

Configuración

Page 7: FrameWork Cake PHP

Después de instalar CakePHP, crear una aplicación web básica solo requiere aplicar la configuración de una base de datos. Existen, otras configuraciones opcionales, que puedes realizar con el objetivo de aprovechar las ventajas de la arquitectura flexible de CakePHP. Se pueden agregar fácilmente elementos al núcleo de CakePHP, configurar URL personalizadas y definir inflexiones.

Configuración de Base de Datos

CakePHP espera que los detalles de configuración de la base de datos estén en app/config/database.php. Un ejemplo de configuración puede encontrarse en el archivo app/config/database.php.default. Esta configuración debería verse como:

var $default = array('driver' => 'mysql', 'persistent' => false, 'host' => 'localhost', 'login' => 'cakephpuser', 'password' => 'c4k3roxx!', 'database' => 'mi_proyecto', 'prefix' => '');

1. var $default = array('driver' => 'mysql',

2. 'persistent' => false,

3. 'host' => 'localhost',

4. 'login' => 'cakephpuser',

5. 'password' => 'c4k3roxx!',

6. 'database' => 'mi_proyecto',

7. 'prefix' => '');

8.

Clave Valor

driver El nombre del controlador de base de datos que se desea utilizar. Ejemplo: mysql, postgres, sqlite, pear-nombrededriver, adodb-nombrededriver, mssql, oracle, odbc.

persistent Si se debe usar o no una conexión persistente a la base de datos. host El nombre de servidor de la base de datos (o dirección IP). login El nombre de usuario para la cuenta. password La contraseña para la cuenta. database Nombre de la base de datos a usar para la conexión prefix (opcional)

El texto que prefija cada nombre de tabla en la base de datos. Útil si se comparte la base de datos con varias aplicaciones. Dejar vacío si no se desea ninguno.

port (opcional)

El puerto TCP o socket Unix a usarse para la conexión con el servidor de base de datos.

encoding Indica la codificación de caracteres a usar para enviar las sentencias SQL al servidor.

schema Usado en la configuración de PostgreSQL para especificar el esquema a

Page 8: FrameWork Cake PHP

utilizar.

Configuración del Core

La configuración de la aplicación en CakePHP se encuentra en /app/config/core.php. Este archivo es una colección de definiciones de variables Configure y definiciones de constantes que determinan como ha de comportarse la aplicación.

La Clase de Configuración

La nueva clase Configure de CakePHP puede ser utilizada para guardar y recuperar valores específicos de la aplicación o de tiempo de ejecución. Esta clase permite almacenar cualquier cosa en ella, para luego usarla en cualquier lugar de tu código: una tentación segura para romper el patrón MVC con el cual fue diseñado CakePHP, así que, hay te ser cuidadoso con esta configuración.

Esta clase actúa como un singletón, y sus métodos pueden ser llamados desde cualquier lugar en tu aplicación, en un contexto estático

Métodos de la Clase Configure

Write: Utiliza write() para almacenar datos en la configuración de la aplicación

write(string $clave, mixed $valor)Configure::write('Empresa.lema',' restaurante Manager evolution');

Read: Se usa para leer datos de configuración de la aplicación. Por defecto devuelve el importante valor de "debug" (nivel de depuración). Si se especifica una clave, los datos correspondientes son devueltos. Usando nuestros anteriores ejemplos de write(), podemos leer esos datos de vuelta.

read(string $clave = 'debug')

Configure::read('Empresa.lema'); //devuelve: ‘ restaurante manager evolution'

Delete: Se usa para borrar información de configuración de la aplicación.delete(string $clave)

Configure::delete('Empresa.nombre');

Load: Usa este método para cargar información de configuración desde una archivo específico.

Page 9: FrameWork Cake PHP

load(string $path)

Configure::load('mensajes');

Versión: Devuelve la versión de CakePHP de la aplicación actual.version()

Variables de Configuración Principales de CakePHP

La clase Configure se usa para manejar un conjunto de variables de configuración de CakePHP. Estas variables pueden ser encontradas en app/config/core.php.

Variable de Configuración Descripción

debug Cambia el nivel de depuración de cake

0 = Modo produción. No produce ninguna salida.1 = Muestra los error y warnings.2 = Muestra los error, warnings, y consultas SQL3 = Muestra los error, warnings, consultas SQL, y volcado completo del Controller.

App.baseUrl Descomenta esta definición si no deseas utilizar el mod_rewrite de Apache. No te olvides de eliminar los archivos .htaccess también.

Routing.admin Descomenta esta definición si deseas utilizar las rutas admin de CakePHP. Asigna la variable al nombre de la ruta que te gustaría utilizar. Más adelante se explicará en detalle.

Cache.disable Cuando se asigna true, el cache se deshabilita para toda la aplicación.

Cache.check Si se asigna true, habilita el cache de las vistas. También es necesario activar el cache en los controllers, pero esta variable habilita la detección de dichas configuraciones.

Session.save Le indica a CakePHP qué mecanismo de almacenamiento de sesiones se debe utilizar

php = Utiliza el almacenamiento por defecto de phpcake = Guarda los datos de sesión en /app/tmpdatabase = Guarda los datos en una tabla de la base de datos. Asegúrate de cargar el archivo SQL ubicado en /app/config/sql/sessions.sql.

Session.table El nombre de la tabla (sin incluir el prefijo) que guarda los datos de la sesión.

Session.database El nombre de la base de datos que guarda los datos de sesión.

Session.cookie El nombre del cookie utilizado para hacer seguimiento de las sesiones.

Session.timeout El tiempo base de validez de la sesión en segundos. El valor real depende de la variable Security.level

Session.start Inicia automáticamente la sesión cuando se asigna true.

Session.checkAgent Cuando se asigna false, Las sesiones de CakePHP no se asegurarán de que el "user agent" del usuario no cambie entre peticiones.

Security.level El nivel de seguridad de CakePHP. El tiempo de validez de la sesión definido en 'Session.timeout' se multiplica de acuerdo a lo siguiente.

Valores válidos:

Page 10: FrameWork Cake PHP

'high' = x 10'medium' = x 100'low' = x 300

Security.salt Una palabra aleatoria usada en sumas de seguridad.

Acl.classname, Acl.database Variables usadas para las Listas de Control de Acceso de CakePHP. Lee el capítulo de listas de control de acceso para más información.

La Clase App

Cargar clases adicionales se ha vuelto mucho más sencillo con CakePHP. En versiones anteriores existían funciones diferentes para cargar una clase dependiendo de su tipo. Estas funciones han sido reemplazadas, ahora toda la carga de clases debería hacerse a través de el método App::import(). Éste método te asegura que una clase ha sido cargada sólo una vez, que las clases que extiende se hayan cargado apropiadamente, y resuelve las rutas de ubicación automáticamente en la gran mayoría de los casos.

App::import()A primera vista App::import parece complejo, sin embargo, en la mayoría de los casos es suficiente con tan sólo dos parámetros.App::import($type, $name, $parent, $search, $file, $return);

App::import('Core', 'Sanitize');Lo anterior hará que la clase Sanitize esté disponible para su uso.

Con app::import() se pueden importar modelos, componentes, comportamientos, ayudantes y desde plugins.

Ejemplo, Para cargar vendors/geshi.php se utilizaría:

App::import('Vendor', 'geshi');

Configuración de Rutas

El enrutamanieto permite hacer una relación entre URLs y acciones de los controller. CakePHP viene configurado con un conjunto de rutas por defecto. Estas rutas te llevarán bastante lejos en cualquier aplicación. Puedes acceder a una acción directamente desde el URL colocando su nombre en la petición. También puedes pasar parámetros a las acciones de tus controladores usando el URL.

URL: /monos/saltar

Page 11: FrameWork Cake PHP

Dirige a: MonosController->saltar();

URL: /tareas/ver/45Dirige a: TareasController->ver(45);

Inflexiones Propias

Las convenciones de nomenclatura de CakePHP pueden ser muy buenas. Nombras la tabla de base de datos "usuarios", tu modelo "Usuario", tu controlador "UsuariosController" y todo funcionará automáticamente. La forma en que CakePHP sabe como atar unas cosas a otras es a través de las inflexiones de palabras entre formas en singular y plural.

Hay ocasiones, sobre todo para usuarios de habla hispana, en que encontrarás situaciones donde el inflector de CakePHP no funcione como lo esperas. Si CakePHP no es capaz de reconocer tu Reloj o Ciudad, editar el archivo de inflexiones propias es la manera de indicarle a CakePHP que existen otros casos especiales. Este archivo se encuentra en /app/config/inflections.php.

Variable de inflections.php

Descripción

$pluralRules Este arreglo contienen las expresiones regulares para pluralizar los casos especiales. Las claves del arreglo son los patrones y los valores los reemplazos.

$uninflectedPlural Un arreglo que contiene palabras que no han de ser modificadas para obtener su plural, como la palabra gente o dinero.

$irregularPlural Un arreglo que contiene palabras y su respectivo plural. Las claves de este arreglo contienen la forma singular y los valores la forma plural. Este arreglo debe ser utilizado para colocar palabras que no sigan las reglas definidas en $pluralRules.

$singularRules Igual que $pluralRules, solo que contiene las reglas para singularizar palabras.

$uninflectedSingular Igual que $uninflectedPlural, solo que este arreglo contiene las palabras que no tienen singular. Por defecto es igual que $uninflectedPlural.

$irregularSingular Igual que $irregularPlural, solo que con palabras en forma singular.

Controladores

Un controlador (Controller) se usa para manejar la lógica de cierta sección de su aplicación. Comúnmente, los controladores (Controllers) son usados para manejar la lógica de un solo modelo (Model). Los controladores pueden tener cualquier cantidad de métodos a los que normalmente se les llama acciones.

El App Controller

Page 12: FrameWork Cake PHP

Como se comentó en la introducción, la clase AppController es la clase superior a todos los controladores de tu aplicación. AppController extiende la clase Controller incluida en la libreria base de CakePHP.

Las propiedades y métodos creados en tu AppController estarán disponibles para todos los controladores de tu aplicación. Es el sitio ideal para poner el código que será común a todos los controladores de tu aplicación.

CakePHP combina las siguientes variables de AppController con los controladores de tu aplicación:

$components $helpers $uses

El Pages Controller

El núcleo de CakePHP viene con un controlador por defecto llamado the Pages Controller (el Controlador de Páginas) (cake/libs/controller/pages_controller.php). La página de inicio que ves luego de la instalación, es generada utilizando este controlador.

Por ejemplo: Sí se crea un archivo de vista app/views/pages/about_us.ctp se puede accesar a él utilizando la url http://example.com/pages/about_us

Atributos del Controlador

$nameLos usuarios de PHP4 deberían empezar la definición de sus controladores con el atributo $name. Este atributo debería ser asignado con el nombre del controlador. Usualmente este es simplemente el plural del modelo principal al que el controlador está asociado. Esto previene algunos problemas de distinción de mayúsculas que tiene PHP4 para los nombres de las clases.

Ejemplo:<?phpclass RecetasController extends AppController {var $name = 'Recetas';}?>

$components, $helpers y $uses

Los siguientes atributos más comunmente utilizados del controlador indican a CakePHP qué ayudantes (helpers), componentes (components), y modelos (models) utilizarás en conjunción con el controlador actual.

Atributos Relacionados con la Página: "$layout" y "$pageTitle"

Page 13: FrameWork Cake PHP

Existen unos pocos atributos en los controladores de CakePHP que te dan control sobre cómo se colocan tus vistas (views) dentro del diseño (layout).

El Atributo de Parámetros ("$params")

Los parámetros del controlador están disponibles en $this->params en tu controlador de CakePHP. Esta variables es usada para proporcionar acceso a la información sobre la petición actual. El uso más común de $this->params es obtener acceso a información que ha sido entregada al controlador a través de las operaciones POST o GET.

form

$this->params['form']

Cualquier dato POST de cualquier formulario se almacena aquí, incluyendo información también hallada en $_FILES.

Admin

$this->params['admin']

Contiene el valor 1 si la acción (action) actual fue invocada mediante enrutamiento "admin".

bare

$this->params['bare']

Almacena un 1 si el diseño (layout) actual está vacío; 0 si no.

isAjax

$this->params['ajax']

Almacena un 1 si la petición actual es una llamada ajax; 0 si no. Esta variables sólo se establece si el componente RequestHandler es usado en el controlador.

controller

$this->params['controller']

Almacena el nombre del controlador actual que está sirviendo la petición. Por ejemplo, si fue pedida la URL /posts/view/1, $this->params['controller'] será igual a "posts".

Page 14: FrameWork Cake PHP

Action Pass url data prefix named persistModel

Métodos del Controlador

Interactuando con Vistas

Set : El método set() es la principal manera de enviar datos desde tu controlador a tu vista (view). Una vez que has utilizado set(), la variable puede ser accedida en tu vista.

set(string $variable, mixed $valor)

render: El método render() es llamado automáticamente al final de cada acción de controlador pedida. Este método lleva a cabo toda la lógica de la vista (usando los datos que has proporcionado con el método set()), coloca la vista (view) dentro de su diseño (layout) y lo sirve de vuelta al usuario final.

render(string $action, string $layout, string $file)

Control de Flujo

Redirect: El método de control de flujo que más frecuentemente utilizarás es redirect(). Este método toma su primer parámetro en forma de URL relativa de CakePHP. Por ejemplo, cuando un usuario ha hecho un pedido satisfactoriamente, probablemente desearás redirigirle a una ventana de recibo.

redirect(string $url, integer $status, boolean $exit)

flash: Igualmente, el método flash() es usado para redirigir un usuario a una nueva página tras una operación. El método flash() es diferente en cuanto que muestra un mensaje antes de enviar al usuario a otra URL.

flash(string $message, string $url, integer $pause)

Retrollamadas o Callback: Los controladores de CakePHP vienen con retrollamas (callbacks) empotradas que puedes usar para insertar lógica justo antes o después de que las acciones del controlador sean llevadas a cabo.

Page 15: FrameWork Cake PHP

beforeFilter()

beforeRender()

afterFilter()

afterRender()

postConditions: Usa este método para convertir un conjunto de datos de modelo recibidor mediante POST (de inputs compatibles con HtmlHelper) en un conjunto de condiciones de búsqueda para un modelo.

Pagínate: Este método es usado para paginar resultados cargados por tus modelos. Puedes especificar tamaño de páginas, condiciones de búsqueda del modelo y más. Mira la sección paginación para más detalles sobre cómo usar paginate.

requestAction: Esta función llama a una acción de un controlador de cualquier lugar y devuelve los datos de la acción. La dirección $url pasada es una URL relativa de CakePHP (/nombrecontrolador/nombreaccion/parametros). Para pasar datos extras a la acción del controladores receptor, añádelos al array $options.

requestAction(string $url, array $opciones)

loadModel: La función loadModel es útil cuando se necesita usar un modelo que no es propiamente el modelo por defecto del controlador o uno de sus modelos asociados.loadModel(string $modelClass, mixed $id)

Componentes

Los componentes son paquetes de lógica que son compartidos entre los controladores. Si tiene ganas de copiar y pegar código de un controlador a otro, debería antes considerar agrupar algunas funcionalidades en un componente.

CakePHP incluye un conjunto fantástico de componentes listos para usar para conseguir ayuda con:

Seguridad Sesiones Lista de control de acceso (ACL) Emails Cookies

Page 16: FrameWork Cake PHP

Autenticación Manejo de pedidos (Requests)

Creando Componentes a medida

Supongamos que nuestra aplicación online necesita efectuar una compleja operación matemática en muchas partes de la aplicación. Creariamos un componente que albergara esa lógica 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/math.php.

Añadiendo Componentes a tus Controladores

Una vez finalizado nuestro componente, podemos usarlo en los controladores de la aplicación añadiendo su nombre (excepto la parte "Component" al array $components del controlador.

Acceso a clases MVC dentro de componentes

Para acceder a la instancia del controlador desde tu recien creado componente, necesitarás implementar el método initialize() o el startup(). Estos métodos especiales llevan una referencia al controlador como primer parámetro y son llamados automáticamente. El método initialize() es llamado antes del método beforeFilter(), y el método startup() después del método beforeFilter. Si por algún motivo no deseas que el método startup() sea llamado cuando el controlador está inicializando cosas, dale el valor true a la variable $disableStartup.

Si deseas insertar algún código de lógica antes de que el controlador beforeFilter() sea llamado, necesitarás usar el método initialize() del componente.

Usando Componentes en tu Componente

A veces uno de tus componentes puede depender de otro. Si las funcionalidades que estos componentes proveen no están relacionados, excepto por su dependencia el uno del otro, entonces no querrás 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.

Ejemplo:

Page 17: FrameWork Cake PHP

<?phpclass PadreComponent extends Object {var $name = "Padre";var $components = array( "Hijo" );function initialize(&$controller) {$this->Hijo->foo();}function bar() {// ...} }

Modelos

Un Modelo representa tu modelo de datos y, en programación orientada a objetos, es un objeto que representa una "cosa", como un coche, una persona, o una casa. Un blog, por ejemplo, puede contener varios artículos (posts) y cada artículo puede contener varios comentarios. Los objetos Blog, Artículo (Post) y Comentario son ejemplos de modelos, cada uno asociado con el otro.

<?phpclass Ingredient extends AppModel {var $name = 'Ingredient';}?>

Simplemente con esta declaración, se le otorga al modelo Ingredient toda la funcionalidad que necesitarás para crear consultas junto con guardado y borrado de datos. Estos métodos mágicos provienen del modelo de herencia de CakePHP. El modelo Ingredient extiende el modelo de aplicaciónm AppModel, el cual extiende la clase Model, interna de CakePHP. Es esta clase Model interna la que otorga la funcionalidad a nuestro modelo pesonalizado, Ingredient.

La clase intermedia AppModel está vacía y reside por defecto dentro de la carpeta /cake/. Redefinir AppModel te permitirá definir funcionalidad que debería estar disponible a todos los modelos dentro de tu aplicación. Para hacer eso, necesitas crear tu propio fichero app_model.php que reside en la raíz de la carpeta /app/. Creando un proyecto utilizando Bake, Bake generará automáticamente este fichero por ti.

Crea tu fichero modelo en PHP en el directorio /app/models/ o en un subdirectorio de /app/models/. CakePHP lo encontrará en cualquier lugar en el directorio. Por convención, debería tener el mismo nombre que la clase; para este ejemplo, ingredient.php.

Page 18: FrameWork Cake PHP

CakePHP creará dinamicamente un objeto modelo por ti si no puede encontrar un archivo correspondiente en /app/models. Esto también significa que si, accidentalmente, nombras tu archivo de manera errónea (p.ej. Ingredient.php o ingredients.php) CakePHP utilizará AppModel en lugar de tu archivo de modelo con nombre incorrecto. Si estás tratando de utilizar un método de un modelo personalizado y estás obteniendo errores SQL, normalmente es porque CakePHP no puede encontrar tu modelo.

La propiedad $name es necesaria para PHP4 pero opcional para PHP5.

Creando Tablas de Bases de Datos

A pesar de que CakePHP puede tener orígenes de datos (datasources) que no son manejadas por sistemas de gestión de bases de datos, la mayoría de las veces lo son. CakePHP está diseñado para ser agnóstico y funcionará con MySQL, MSSQL, Oracle, PostgreSQL y otros. Puedes crear tus tablas de base de datos como lo harías normalmente. Cuando creas tus clases del Modelo, automáticamente se mapean a las tablas que has creado.

Los nombres de las tablas son, por convención, en minúsculas y en plural, con las palabras de los nombres de tablas de varias palabras separadas por guiones de subrayado (_). Por ejemplo, un nombre de Modelo de Ingredient espera el nombre de tabla ingredients. un nombre de Modelo de EventRegistration debería esperar un nombre de tabla event_registrations. CakePHP inspeccionará tus tablas para determinar el tipo de dato de cada campo y utiliza esta información apra automatizar varias características como la salida de campos de formulario en la vista.

Conclusion

Cake php es un Framework de código abierto el cual es muy flexible a los cambios y muy útil como herramientas para diseñar aplicaciones web. Se emplea mediate el lenguaje php ya sea el 4 o php 5. Necesita de un servidor como iss o apache para implementar las aplicaciones. Es muy recomendable utilizarlo por su facilidad de aprendizaje aunque lleva su cantidad de esfuerzo y dedicación. Las posibilidades que ofrece son variadas y muy eficientes.