28

Tutorial Introductorio a CakePHP

Embed Size (px)

DESCRIPTION

Tutorial Introductorio a la Utilización del Framework CakePHP.

Citation preview

Page 1: Tutorial Introductorio a CakePHP
Page 2: Tutorial Introductorio a CakePHP

Tutorial Introductorio a CakePHP Andrés Smerkin

ÍndiceIntroducción..........................................................................................................................................3

Sobre este tutorial............................................................................................................................3¿Qué es CakePHP?..........................................................................................................................3Por qué usar CakePHP.....................................................................................................................3Modelo – Vista – Controlador..........................................................................................................4

Primeros pasos con CakePHP..............................................................................................................7Modelos (Models)............................................................................................................................7Controladores (Controllers).............................................................................................................8Vistas (Views)..................................................................................................................................9Comportamientos (Behaviors).......................................................................................................10Ayudantes (Helpers).......................................................................................................................11Componentes (Components) .........................................................................................................11

Ejemplo: Un Blog...............................................................................................................................12Introducción...................................................................................................................................12Descargar CakePHP.......................................................................................................................12Creando la base de datos para nuestro blog...................................................................................13Configurando la Base de Datos.....................................................................................................14Configuración Opcional.................................................................................................................14Sobre mod_rewrite.........................................................................................................................15Creando un modelo para los artículos (Post Model)......................................................................16Crear un Controlador para nuestros Artículos (Posts)...................................................................17Creando una vista para los artículos (View)..................................................................................18Añadiendo artículos (posts)...........................................................................................................21Validando los datos........................................................................................................................22Editando Posts................................................................................................................................23Borrando Artículos.........................................................................................................................25Rutas (Routes)................................................................................................................................26Conclusión.....................................................................................................................................27

2

Page 3: Tutorial Introductorio a CakePHP

Tutorial Introductorio a CakePHP Andrés Smerkin

Introducción

Sobre este tutorialEste tutorial tiene como intención brindarte un pantallazo general del framework CakePHP, en

conjunto con un ejemplo (mayormente tomado de la documentación oficial) para que puedas entender el funcionamiento del framework, pegarle un vistazo a las posibilidades de este, y a partir de aquí, sumergirte directamente con la documentación oficial y sacarle el jugo a esta fantástica herramienta.

El tutorial cuenta principalmente con dos partes: la primera es una explicación sobre los rudimentos de CakePHP y la segunda es un ejemplo muy sencillo sobre la implementación de un Blog. Si eres de esas personas que les gusta comenzar embarrándose las manos pues te recomiendo que vayas directamente al ejemplo y vuelvas para atrás cuando sea necesario.

¿Qué es CakePHP?CakePHP es un framework para el desarrollo aplicaciones web escrito en PHP, creado sobre los

conceptos de Ruby on Rails.

CakePHP te proporciona una base robusta para construir tus aplicaciones. Se encarga de todo, desde la petición inicial del usuario hasta la construcción del código HTML final. Como CakePHP sigue los fundamentos del patrón MVC, te permite personalizar y extender fácilmente cada una de sus partes.

Este framework también proporciona una estructura organizacional: desde los nombres de archivos hasta los nombres de las tablas en la base de datos. Esto mantiene tu aplicación consistente y ordenada. Siendo un concepto sencillo, seguir las convenciones definidas te facilitará encontrar rápidamente cada cosa y aprenderás en menos tiempo los fundamentos del framework.

Por qué usar CakePHP• Construir rápidamente: Puedes utilizar la generación de código y el andamiaje para

construir prototipos rápidamente.

• Sin configuración: Sin archivos XML o YAML complicados. Simplemente configura tu base de datos y ya estás listo para cocinar.

3

Page 4: Tutorial Introductorio a CakePHP

Tutorial Introductorio a CakePHP Andrés Smerkin

• Licencia amistosa: CakePHP está licenciado bajo la licencia del MIT, la cual lo hace perfecto para el uso comercial.

• Baterías incluidas: Todo lo que necesitas ya se encuentra dentro del framework. Traducciones, acceso a base de datos, caching, validación, autenticación y mucho más.

• Convenciones MVC limpias: En vez de tener que planear donde va cada cosa, CakePHP viene con un conjunto de convenciones para guiarte en el desarrollo de la aplicación.

• Seguridad: CakePHP viene con un herramientas incluidas para la validación de inputs, protección CSRF, protección de formularios, prevención de inyecciones y prevención XSS, para mantener tu aplicación segura y a salvo.

Modelo – Vista – ControladorCakePHP sigue la convención del patrón de diseño de Modelo – Vista – Controlador. Al

programar usando MVC separamos la aplicación en tres capas principales: modelos, vistas y controladores.

La capa de modelo

La capa de modelo representa la parte de la aplicación que implementa la lógica de negocio. Esto significa que es la responsable de obtener los datos, convertirlos a algo significativo para la aplicación, así también como el procesamiento, validación, asociaciones y cualquier otra tarea relativa con respecto a la manipulación de esta información.

De un simple vistazo, los objetos de modelo pueden ser visto como la primer capa de interacción con cualquier base de datos que estés usando en la aplicación, pero en general estos modelos son los mayores conceptos alrededor de los cuales implementas tu aplicación (son elementos del dominio de la aplicación).

En el caso de una red social, por ejemplo, la capa de modelos debería tener en cuenta tareas tales como el guardado de los datos de usuario, las asociaciones entre amigos, la manipulación de fotografías, la búsqueda de nuevos amigos a partir de recomendaciones, etc. En este caso, los modelos podrían ser “Amigo”, “Usuario”, “Comentario”, “Foto”.

La capa de vista

La capa de vista muestra una presentación de información modelada. La vista es la responsable de producir interfaces presentables que puedan ser necesarias a partir de la información disponible en la aplicación.

Por ejemplo, como la capa de modelo devuelve un conjunto de datos, la vista los utilizaría para renderizar una interfaz en HTML que los contenga, o un resultado en XML para ser consumidos.

La capa de vista no solo se encuentra limitada a HTML o representación en texto de los datos, sino que también puede ser utilizada para generar una gran cantidad de otros formatos dependiendo de las necesidades, tales como videos, música, documentos y cualquier otro formato que puedas imaginarte.

4

Page 5: Tutorial Introductorio a CakePHP

Tutorial Introductorio a CakePHP Andrés Smerkin

La capa de controlador

La capa de controlador manipula peticiones de los usuarios. Es la responsable de generar una respuesta a partir de los recursos de la capa de modelos y de vistas.

Los controladores pueden ser visto como administradores que tienen en cuenta todos los recursos para completar una tarea, y los delegan a los trabajadores apropiados. Esperan por peticiones desde los clientes, chequean la validez de dichas peticiones de acuerdo a reglas de autenticación y autorización, delegan procesamiento y obtención de datos a los modelos y seleccionan los tipos correctos de datos presentacionales que el cliente acepta, para finalmente delegar el proceso de renderizado de vistas a la capa de vistas.

Ciclo de peticiones de CakePHP

La imagen muestra el ciclo típico de una petición en CakePHP

Una petición típica en CakePHP comienza con un usuario solicitando una página o un recurso en la aplicación. Esta petición es procesada en primer lugar por un dispatcher, el cual se encarga de seleccionar el controlador correcto para manejarla.

Una vez que la petición llega al controlador, este se comunicará con la capa de modelos para procesar cualquier dato utilizando operaciones de obtención o guardado según sea necesario. Después de que esta comunicación termina, el controlador procederá a delegar a la vista correcta la tarea de generar un resultado de salida a partir de los datos provistos por el modelo.

Finalmente, cuando la salida es generada, es renderizada inmediatamente al usuario.

Casi todas las peticiones a la aplicación seguirán este patrón básico. Añadiremos algunos detalles más adelante, los cuales son específicos de CakePHP.

Beneficios

¿Por qué utilizar MVC? Porque es un patrón de diseño de software probado que convierte una aplicación en algo mantenible, modularizable y de rápido desarrollo. Maquetar una aplicación en modelos, vistas y controladores separados vuelve a una aplicación muy liviana. Características nuevas pueden ser añadidas fácilmente, y agregar nuevas vistas a viejas características es un proceso simple de realizar. El diseño modular y separado también permite que los desarrolladores y

5

Page 6: Tutorial Introductorio a CakePHP

Tutorial Introductorio a CakePHP Andrés Smerkin

los diseñadores trabajen en simultaneo, incluyendo la posibilidad de prototipar rápidamente. La separación también permite que los desarrolladores realicen cambios simultáneamente en una parte de la aplicación sin afectar a las otras.

Si nunca has construido una aplicación de esta manera, toma algún tiempo acostumbrarse, pero una vez que te acostumbras al proceso, no querrás hacerlo de otra forma.

6

Page 7: Tutorial Introductorio a CakePHP

Tutorial Introductorio a CakePHP Andrés Smerkin

Primeros pasos con CakePHP

Modelos (Models)Los modelos son las clases que definen la lógica de negocio dentro de la aplicación. Esto

significa que los modelos son los responsables de administrar casi cualquier cosa que pase con los datos, tales como validación, interacciones y la evolución del flujo de la información en el dominio de trabajo.

Usualmente, en CakePHP, los modelos representan datos y son utilizados en CakePHP para el acceso a estos datos. Más específicamente, estos modelos representan tablas en la base de datos, pero no se encuentran de manera alguna limitado a esto, sino que pueden ser utilizados para acceder a cualquier cosa que manipule datos, tales como archivos, servicios web externos, eventos iCal, o filas en un archivo CSV.

Un modelo puede encontrarse asociado con otros modelos. Por ejemplo, una Receta (Recipe) puede encontrarse asociada con su autor (Author) así como con cada uno de los ingredientes (Ingredient) que la componen.

Aquí encontramos un pequeño ejemplo de un modelo en CakePHP

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

Con esta simple declaración, el modelo Ingredient es provisto con todas las funcionalidades que se necesitan para crear consultas, así también como para guardar y borrar datos. Estos métodos especiales vienen desde las clases de modelo de CakePHP a través de la herencia. El modelo Ingredient extiende el modelo de la aplicación (AppModel), el cual a su vez extiende de la clase Model interna de CakePHP. Esta última clase es la que provee de funcionalidad al modelo Ingrediente.

La clase Intermedia, AppModel, se encuentra vacía y es la que permite definir funcionalidad que

7

Page 8: Tutorial Introductorio a CakePHP

Tutorial Introductorio a CakePHP Andrés Smerkin

se encontrará disponible en todos los modelos dentro de la aplicación. Para hacer esto, debes crear tu propio AppModel.php dentro del directorio Model de la aplicación.

Para que el modelo Ingredient funcione, debemos crear el archivo php dentro del directorio /app/Model/ . Por convención, el archivo debe tener el mismo obre que la clase. Para este ejemplo sería Ingredient.php.

CakePHP creará dinámicamente un objeto Ingredient.

Una vez definido, el modelo puede ser accedido desde el Controlador. CakePHP automáticamente pondrá el modelo a disponibilidad para accederlo cuando el nombre sea igual al del controlador. Por ejemplo, un controlador llamado IngredientsController automáticamente inicializará el modelo Ingredient y lo adjuntará al controlador como $this­>Ingredient. 1

<?phpclass IngredientsController extends AppController { public function index() { //Obtiene todos los ingredientes y se los pasa a la vista $ingredients = $this->Ingredient->find('all'); $this->set('ingredients', $ingredients); }}

Posteriormente, mediante un ejemplo, veremos como se asocian los modelos entre sí.

Controladores (Controllers)Luego de que el routeo de la petición ha sido aplicado y que el controlador correcto se ha

encontrado, se llama una acción de controlador. El controlador debe manipular la interpretación de los datos y asegurarse de que se llaman los modelos correctos y que la respuesta es renderizada en una vista. Los controladores pueden ser vistos como un “hombre en el medio” entre los modelos y las vistas. Es bueno mantener los controladores delgados y los modelos gordos. Esto ayudará a reutilizar más fácilmente el código y a hacerlo más legible.

Usualmente, los controladores son utilizados para manejar la lógica alrededor de un solo modelo. Por ejemplo, para el modelo Ingredient teníamos el controlador IngredientsController. En cakePHP, los controladores son nombrados según el modelo primario que manejan, aunque es totalmente posible hacer que los controladores manejen más de un modelo.

Los controladores de aplicación extienden de la clase AppController, la cual a su vez extiende de la clase del núcleo Controller. El AppController puede ser definido dentro de /app/Controller/AppController.php y debería contener los métodos que son compartidos entre todos los controladores de aplicación.

<?phpclass AppController extends Controller {}

1 http://book.cakephp.org/2.0/en/models.html

8

Page 9: Tutorial Introductorio a CakePHP

Tutorial Introductorio a CakePHP Andrés Smerkin

Los controladores proveen un número de métodos que son llamados acciones. Las acciones son métodos en un controlador que manejan peticiones. Por defecto, todos los métodos públicos en un controlador son acciones, y son accesibles desde una url. Las acciones son las responsables de interpretar las peticiones y crear una respuesta. Usualmente, las respuestas se visualizan en forma de vistas renderizadas, pero también existen otras formas de crear respuestas.

<?php# /app/Controller/RecipesController.php

class RecipesController extends AppController { public function view($id) { //La lógica de la acción va aquí … }

public function share($customerId, $recipeId) { //La lógica de la acción va aquí … }

public function search($query) { //La lógica de la acción va aquí … }}

En el ejemplo anterior, el RecipesController contiene las acciones view(), share() y search().

Veremos más sobre controladores en el ejemplo final2.

Vistas (Views)Las vistas son las responsables de generar la salida específica solicitada por la petición. Casi

siempre resulta ser HTML, XML o JSON, pero el crear archivos PDF y el streaming que los usuarios visualicen también es responsabilidad de la capa de vistas.

CakePHP viene con algunas clases incorporadas para la manipulación del renderizado de los escenarios más comunes:

• Para crear webservices en XML o JSON

• Para servir archivos protegidos, o generados dinámicamente, pueden utilizarse “Media Views”

• Para crear temas visuales, se pueden utilizar Themes.

View Templates

La capa de vista de CakePHP es el cómo le hablas a los usuarios. La mayoría de las veces tus vistas mostrarán documentos en HTML a los navegadores, pero también podrías necesitar servir datos AMF a un objeto de flash, responder a una aplicación remota vía SOAP o generar un archivo CSV para un usuario.

2 Puedes consultar más información sobre controladores en http://book.cakephp.org/2.0/en/controllers.html

9

Page 10: Tutorial Introductorio a CakePHP

Tutorial Introductorio a CakePHP Andrés Smerkin

Por defecto, los archivos de vistas de CakePHP son escritos en PHP plano y tienen la extensión .ctp. Estos archivos contienen la lógica presentacional necesaria para para obtener los datos desde el controlador en un formato que esté listo para que la audiencia pueda consumirlo. Si prefieres utilizar un lenguaje de plantillas tal como Twig o Smarty, una subclase de “View” puenteará tu lenguaje de templating a CakePHP.

Las vistas son almacenadas en /app/View/, en una carpeta llamada con el nombre del controlador que utiliza la vista en cuestión, y el con el nombre de la acción a la que corresponde. Por ejemplo, la vista view() para el controlador ProductsController, normalmente se ubicaría en /app/View/Products/view.ctp.

La capa de vista en CakePHP está compuesta de diferentes partes. Cada parte tiene diferentes utilizaciones. Las partes son:

• Vistas: Las vistas son la parte de la página que es única a la acción que se está corriendo. Forman la parte principal de las respuestas de la aplicación. • elementos: Son pequeños trozos de códigos reutilizables en las vistas. Los elementos son renderizados dentro de las vistas.• layouts: Los archivos de vista que contienen lógica presentacional y que envuelven muchas interfaces de la aplicación. Las mayoría de las vistas son renderizadas dentro de un layout. • helpers: Estas clases encapsulan lógica de las vistas que son necesarias en muchas partes de la capa de vista. Entre otras cosas, los ayudantes en CakePHP sirven para construir formularios, construir funcionalidad Ajax, paginar datos, o servir contenido RSS. Cubriremos más adelante a los ayudantes.

Elementos

La mayoría de las aplicaciones contienen pequeños bloques de código presentacional que necesita repetirse de página a página, algunas veces en diferentes lugares dentro de un layout. CakePHP puede ayudarte a repetir partes de tu sitio web que necesitan ser reutilizadas. Estas partes reutilizables son llamadas elementos. Publicidades, cajas de ayuda, controles navegacionales, menúes extras, formularios de login y llamadas extra generalmente son implementados como elementos de CakePHP. Un elemento es básicamente una mino-vista que puede ser incluida dentro de otras vistas, en layouts, e inclusive dentro de otros elementos. Los elementos pueden ser utilizados para hacer una vista más legible.

Comportamientos (Behaviors)Los comportamientos son una forma de organizar la funcionalidad definida en los modelos. Los

comportamientos permiten separar y reutilizar lógica que crea un tipo de comportamiento específico, y permite realizarlo sin la necesidad de utilizar herencia. Por ejemplo, el crear estructuras de árbol. Al proveer una forma simple, pero poderosa, de extender modelos, los comportamientos permiten hacerse cargo de todo ese peso extra que podría no ser parte de la lógica del negocio que se está modelando, o que es necesaria en múltiples modelos y por lo tanto necesita ser extrapolada.

Por ejemplo, considera un modelo que te da acceso a una base de datos que almacena información estructural sobre un árbol. Remover, añadir y migrar nodos en un árbol no es tan simple como borrar, insertar y editar filas en una tabla. Muchas tuplas necesitarían ser actualizadas

10

Page 11: Tutorial Introductorio a CakePHP

Tutorial Introductorio a CakePHP Andrés Smerkin

mientras se mueven cosas de lugar. Más que crear métodos de manipulación de árbol en cada modelo, podríamos simplemente decirle a nuestro modelo que utilice el comportamiento de árbol TreeBehavior, o en términos más formales, que se comporte como un árbol. Esto es conocido como adjuntar un comportamiento a un modelo. Con una simple linea de código, nuestros modelos en CakePHP obtienen un completo conjunto de métodos que permiten interactuar con la capa subyacente.

CakePHP ya incluye comportamientos para estructuras de árbol, contenido traducido, listas de control de acceso, por no mencionar todos los comportamientos disponibles provistos por la comunidad de usuario de PHP, en el Bakery3.

Para más información sobre comportamientos, puede consultar la documentación oficial4.

Ayudantes (Helpers)Los ayudantes son clases que permiten compartir lógica entre muchas vistas de la capa de

presentación (view layer). Los ayudantes contienen lógica presentacional que es compartida entre muchas vistas, elementos o layouts.

CakePHP contiene un número de ayudantes que asisten en la creación de vistas. Ellos asisten en crear código de marcas bien formado (incluyendo formularios), asisten en el formateo de texto, fechas y números, e inclusive pueden acelerar funcionalidad Ajax. Para más información, el book de CakePHP contiene una lista completa5.

Para más información, puedes consultar la documentación oficial sobre Ayudantes6.

Componentes (Components) Los componentes son paquetes de lógica compartida entre todos los controladores. Si en algún

momento te encuentras copiando y pegando código entre controladores, tal vez sea una buena idea envolver algunas funcionalidades en un componente.

CakePHP viene con un conjunto fantástico de componentes del núcleo que puedes usar:

• Seguridad

• Sesiones

• Listas de Control de Accesos

• Emails

• Cookies

• Autenticación

• Manipulación de peticiones

• Paginación

3 http://bakery.cakephp.org/4 http://book.cakephp.org/2.0/en/controllers/components.html5 http://book.cakephp.org/2.0/en/core-libraries.html#core-helpers6 http://book.cakephp.org/2.0/en/views/helpers.html

11

Page 12: Tutorial Introductorio a CakePHP

Tutorial Introductorio a CakePHP Andrés Smerkin

Cada uno de estos componentes del núcleo se encuentran detallados en el manual oficial7.

7 http://book.cakephp.org/2.0/en/core-libraries/toc-components.html

12

Page 13: Tutorial Introductorio a CakePHP

Tutorial Introductorio a CakePHP Andrés Smerkin

Ejemplo: Un Blog

IntroducciónEn este tutorial vamos a crear un blog sencillo desde cero. Empezaremos descargando e

instalando CakePHP, luego crearemos una base de datos y el código necesario para listar, añadir, editar o borrar artículos del blog.

Esto es lo que necesitas:

1. Servidor web funcionando. Asumiremos que estás usando Apache, aunque las instrucciones para otros servidores son similares. Igual tendremos que ajustar un poco la configuración inicial, pero todos los pasos son sencillos. La mayor parte de nosotros podrá tener CakePHP funcionando sin tocar nada en su configuración.

2. Base de datos funcionando. Usaremos MySQL en este tutorial. Necesitarás saber cómo crear una base de datos nueva. CakePHP se encargará del resto.

3. Nivel básico de PHP. Si estás familiarizado con la programación orientada a objetos, mucho mejor. Aún así puedes seguir desarrollando con tu estilo procedimental si lo prefieres.

4. Conocimiento sobre patrón MVC. Puedes encontrar una definición rápida en este tutorial.

¡ Vamos allá !

Descargar CakePHPVamos a descargar la última versión de CakePHP.

Para ello, visita la web del proyecto en github: http://github.com/cakephp/cakephp/downloads y descarga la última versión de la rama 2.0

También puedes clonar el repositorio usando git. git clone git://github.com/cakephp/cakephp.git

Usa el método que prefieras y coloca la carpeta que has descargado bajo la ruta de tu servidor web (dentro de tu DocumentRoot). Una vez terminado, tu directorio debería tener esta estructura8:

8 Puedes consultar más sobre la estructura de directorios de CakePHP en http://book.cakephp.org/2.0/es/getting-started/cakephp-folder-structure.html

13

Page 14: Tutorial Introductorio a CakePHP

Tutorial Introductorio a CakePHP Andrés Smerkin

/path_to_document_root /app /lib /plugins /vendors .htaccess index.php README

Creando la base de datos para nuestro blogVamos a crear una nueva base de datos para el blog. Puedes crear una base de datos en blanco

con el nombre que quieras. De momento vamos a definir sólo una tabla para nuestros artículos (“posts”). Además crearemos algunos artículos de test para usarlos luego. Una vez creada la tabla, ejecuta el siguiente código SQL en ella:

/* tabla para nuestros articulos */CREATE TABLE posts ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, title VARCHAR(50), body TEXT, created DATETIME DEFAULT NULL, modified DATETIME DEFAULT NULL);

/* algunos valores de test */INSERT INTO posts (title,body,created) VALUES ('The title', 'This is the post body.', NOW());INSERT INTO posts (title,body,created) VALUES ('A title once again', 'And the post body follows.', NOW());INSERT INTO posts (title,body,created) VALUES ('Title strikes back', 'This is really exciting! Not.', NOW());

La elección de los nombres para el nombre de la tabla y de algunas columnas no se ha hecho al azar, sino que se ha realizado siguiendo algunas convenciones9. Si sigues las convenciones para nombres en la Base de Datos, y las demás convenciones en tus clases, aprovecharás la potencia del framework y ahorrarás mucho trabajo de configuración.

CakePHP es flexible, si no quieres usar las convenciones puedes configurar luego cada elemento para que funcione con tu Base de Datos legada. Te recomendamos que utilices estas convenciones ya que te ahorrarán tiempo.

Al llamar ‘posts’ a nuestra tabla de artículos, estamos diciendo a CakePHP que vincule esta tabla por defecto al Modelo ‘Post’, e incluir los campos ‘modified’ y ‘created’ con ese nombre, serán automáticamente administrados por CakePHP.

9 Para leer más sobre las convenciones de la base de datos, visita http://book.cakephp.org/2.0/es/getting-started/cakephp-conventions.html

14

Page 15: Tutorial Introductorio a CakePHP

Tutorial Introductorio a CakePHP Andrés Smerkin

Configurando la Base de DatosRápido y sencillo, vamos a decirle a CakePHP dónde está la Base de Datos y cómo conectarnos a

ella. Probablemente ésta será la primera y última vez que lo hagas en cada proyecto.

Hay un archivo de configuración preparado para que sólo tengas que copiarlo y modificarlo con tu propia configuración.

Cambia el nombre del archivo /app/Config/database.php.default por /app/Config/database.php (hemos eliminado el ‘.default’ del final).

Edita ahora este archivo y verás un array definido en la variable $default que contiene varios campos. Modifica esos campos para que se correspondan con tu configuración actual de acceso a la Base de Datos. Debería 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', 'schema' => '', 'prefix' => '', 'encoding' => '');

Ten en cuenta que los campos ‘login’, ‘password’, ‘database’ tendrás que cambiarlos por tu usuario de MySQL, tu contraseña de MySQL y el nombre que le diste a la Base de Datos.

Guarda este archivo.

Ahora ya podrás acceder a la página inicial de bienvenida de CakePHP en tu máquina. Esta página podrás accederla normalmente en http://localhost/cakeblog si has llamado a la carpeta raíz del proyecto ‘cakeblog’. Verás una página de bienvenida que muestra varias informaciones de configuración y te indica si tienes correctamente instalado CakePHP.

Configuración OpcionalHay otras tres cosas que puedes querer configurar, aunque no son requeridas para este tutorial no

está mal echarles un vistazo. Para ello abre el archivo /app/Config/core.php que contiene todos estos parámetros.

1. Configurar un string de seguridad ‘salt’ para usarlo al realizar los ‘hash’. 2. Configurar un número semilla para el encriptado ‘seed’. 3. Definir permisos de escritura en la carpeta Tmp. El servidor web (normalmente ‘apache’) debe poder escribir dentro de esta carpeta y subcarpetas.

El string de seguridad se utiliza en la generación de ‘hashes’. Cambia el valor inicial y escribe cualquier cosa diferente. Cualquier cosa vale. Para cambiarlo vete a la línea 203 del archivo /app/Config/core.php y verás algo así:

15

Page 16: Tutorial Introductorio a CakePHP

Tutorial Introductorio a CakePHP Andrés Smerkin

<?php/** * A random string used in security hashing methods. */Configure::write('Security.salt', 'pl345e-P45s_7h3*S@l7!');?>

El número semilla se utiliza para encriptar y desencriptar cadenas. Cambia el valor por defecto en el ficharo /app/Config/core.php línea 208. No importa qué numero pongas, que sea difícil de adivinar.

<?php/** * A random numeric string (digits only) used to encrypt/decrypt strings. */Configure::write('Security.cipherSeed', '7485712659625147843639846751');?>

Para dar permisos al directorio app/Tmp, la mejor forma es ver qué usuario está ejecutando el servidor web (<?php echo `whoami`; ?>) y cambiar el directorio para que el nuevo propietario sea el usuario que ejecuta el servidor web.

En un sistema *nix esto se hace así:

$ chown -R www-data app/tmp

Suponiendo que www-data sea el usuario que ejecuta tu servidor web (en otras versiones de *unix como fedora, el usuario suele llamarse ‘apache’).

Si CakePHP no puede escribir en este directorio, te informará de ello en la página de bienvenida, siempre que tengas activado el modo depuración, por defecto está activo.

Sobre mod_rewriteSi eres nuevo usuario de apache, puedes encontrar alguna dificultad con mod_rewrite, así que lo

trataremos aquí.

Si al cargar la página de bienvenida de CakePHP ves cosas raras (no se cargan las imágenes ni los estilos y se ve todo en blanco y negro), esto significa que probablemente la configuración necesita ser revisada en el servidor apache. Prueba lo siguiente:

1. Asegúrate de que existe la configuración para procesar los archivos .htaccess. En el archivo de configuración de apache: ‘httpd.conf’ debería existir una sección para cada ‘Directory’ de tu servidor. Asegúrate de que AllowOverride está fijado a All para el directorio que contiene tu aplicación web. Para tu seguridad, es mejor que no asignes All a tu directorio raíz <Directory /> sino que busques el bloque <Directory> que se refiera al directorio en el que tienes instalada tu aplicación web.

2. Asegúrate que estás editando el archivo httpd.conf correcto, ya que en algunos sistemas

16

Page 17: Tutorial Introductorio a CakePHP

Tutorial Introductorio a CakePHP Andrés Smerkin

hay archivos de este tipo por usuario o por aplicación web. Consulta la documentación de apache para tu sistema.

3. Comprueba que existen los archivos .htaccess en el directorio en el que está instalada tu aplicación web. A veces al descomprimir el archivo o al copiarlo desde otra ubicación, estos archivos no se copian correctamente. Si no están ahí, obtén otra copia de CakePHP desde el servidor oficial de descargas.

4. Asegúrate de tener activado el módulo mod_rewrite en la configuración de apache. Deberías tener algo así:

LoadModule rewrite_module libexec/httpd/mod_rewrite.so

(para apache 1.3)::

AddModule mod_rewrite.c

en tu archivo httpd.conf

Si no puedes (o no quieres) configurar mod_rewrite o algún otro módulo compatible, necesitarás activar las url amigables en CakePHP. En el archivo /app/Config/core.php, quita el comentario a la línea:

<?phpConfigure::write('App.baseUrl', env('SCRIPT_NAME'));

Borra también los archivos .htaccess que ya no serán necesarios:

/.htaccess/app/.htaccess/app/webroot/.htaccess

Esto hará que tus url sean así: www.example.com/index.php/nombredelcontrolador/nombredelaaccion/parametro en vez de www.example.com/nombredelcontrolador/nombredelaaccion/parametro.

Si estás instalando CakePHP en otro servidor diferente a Apache, en la documentación encontrarás instrucciones para que funcione la reescritura de URLs10.

Creando un modelo para los artículos (Post Model)Los modelos son una parte fundamental en CakePHP. Cuando creamos un modelo, podemos

interactuar con la base de datos para crear, editar, ver y borrar con facilidad cada ítem de ese modelo.

Los archivos en los que se definen los modelos se ubican en la carpeta /app/Model, y el archivo que vamos a crear debe guardarse en la ruta /app/Model/Post.php. El contenido de este archivo será:

10 Instalación Avanzada: http://book.cakephp.org/2.0/es/installation/advanced-installation.html

17

Page 18: Tutorial Introductorio a CakePHP

Tutorial Introductorio a CakePHP Andrés Smerkin

<?php

class Post extends AppModel { public $name = 'Post';}

?>

Los convenios usados para los nombres son importantes. Cuando llamamos a nuestro modelo Post, CakePHP deducirá automáticamente que este modelo se utilizará en el controlador PostController, y que se vinculará a una tabla en nuestra base de datos llamada posts.

Nota: CakePHP creará dinámicamente un objeto para el modelo si no encuentra el archivo correspondiente en /app/Model. Esto significa que si te equivocas al nombrar el archivo (por ejemplo lo llamas post.php con la primera p minúscula o posts.php en plural) CakePHP no va a reconocer la configuración que escribas en ese archivo y utilizará valores por defecto.

Para más información sobre modelos, como prefijos para las tablas, validación, etc. puedes visitar /models en el Manual11.

Crear un Controlador para nuestros Artículos (Posts)Vamos a crear ahora un controlador para nuestros artículos. En el controlador es donde

escribiremos el código para interactuar con nuestros artículos. Es donde se utilizan los modelos para llevar a cabo el trabajo que queramos hacer con nuestros artículos. Vamos a crear un nuevo archivo llamado PostsController.php dentro de la ruta /app/Controller. El contenido de este archivo será:

<?php class PostsController extends AppController { public $helpers = array('Html','Form');}

Y vamos a añadir una acción a nuestro nuevo controlador. Las acciones representan una función concreta o interfaz en nuestra aplicación. Por ejemplo, cuando los usuarios recuperan la url www.example.com/posts/index (que CakePHP también asigna por defecto a la ruta www.example.com/posts/ ya que la acción por defecto de cada controlador es index por convención) esperan ver un listado de posts. El código para tal acción sería este:

<?phpclass PostsController extends AppController { public $helpers = array ('Html','Form');

function index() { $this->set('posts', $this->Post->find('all')); }}

11 http://book.cakephp.org/2.0/en/models.html

18

Page 19: Tutorial Introductorio a CakePHP

Tutorial Introductorio a CakePHP Andrés Smerkin

Si examinamos el contenido de la función index() en detalle, podemos ver que ahora los usuarios podrán acceder a la ruta www.example.com/posts/index. Además si creáramos otra función llamada foobar(), los usuarios podrían acceder a ella en la url www.example.com/posts/foobar.

Advertencia: Puede que tengas la tentación de llamar tus controladores y acciones de forma determinada para que esto afecte a la ruta final, y así puedas predeterminar estas rutas. No te preocupes por esto ya que CakePHP incorpora un potente sistema de configuración de rutas. Al escribir los archivos, te recomendamos seguir las convenciones de nombres y ser claro. Luego podrás generar las rutas que te convengan utilizando el componente de rutas (Route).

La función index tiene sólo una instrucción set() que sirve para pasar información desde el controlador a la vista (view) asociada. Luego crearemos esta vista. Esta función set() asigna una nueva variab le ‘posts’ igual al valor retornado por la función find('all') del modelo Post. Nuestro modelo Post está disponible automáticamente en el controlador y no hay que importarlo ya que hemos usado las convenciones de nombres de CakePHP.

Para aprender más sobre los controladores, puedes visitar el capítulo /controllers12.

Creando una vista para los artículos (View)Ya tenemos un modelo que define nuestros artículos y un controlador que ejecuta alguna lógica

sobre ese modelo y envía los datos recuperados a la vista. Ahora vamos a crear una vista para la acción index().

Las vistas en CakePHP están orientadas a cómo se van a presentar los datos. Las vistas encajan dentro de layouts o plantillas. Normalmente las vistas son una mezcla de HTML y PHP, aunque pueden ser también XML, CSV o incluso datos binarios.

Las plantillas (layouts) sirven para recubrir las vistas y reutilizar código. Además pueden crearse tantos layouts como se deseen y se puede elegir cuál utilizar en cada momento. Por el momento vamos a usar el la plantilla por defecto default.

¿ Recuerdas que el controlador envió a la vista una variable posts que contiene todos los posts mediante el método set() ? Esto nos generará una variable en la vista con esta pinta:

// print_r($posts) output:

Array( [0] => Array ( [Post] => Array ( [id] => 1 [title] => El Título [body] => Este es el cuerpo del post. [created] => 2008-02-13 18:34:55 [modified] => ) ) [1] => Array (

12 http://book.cakephp.org/2.0/en/controllers.html

19

Page 20: Tutorial Introductorio a CakePHP

Tutorial Introductorio a CakePHP Andrés Smerkin

[Post] => Array ( [id] => 2 [title] => Otro título [body] => Y el cuerpo que le sigue. [created] => 2008-02-13 18:34:56 [modified] => ) ) [2] => Array ( [Post] => Array ( [id] => 3 [title] => Y Otro título más [body] => Esto realmente se pone aburrido. [created] => 2008-02-13 18:34:57 [modified] => ) ))

Las vistas en CakePHP se almacenan en la ruta /app/View y en un directorio con el mismo nombre que el controlador al que pertenecen, en nuestro caso Posts, así que para mostrar estos elementos formateados mediante una tabla tendremos algo como esto:

<!-- Archivo: /app/View/Posts/index.ctp -->

<h1>Posts del blog</h1><table> <tr> <th>Id</th> <th>Title</th> <th>Created</th> </tr>

<!-- Y acá es donde loopeamos el arreglo $posts para mostrar los resultados -->

<?php foreach ($posts as $post): ?> <tr> <td><?php echo $post['Post']['id']; ?></td> <td> <?php echo $this->Html->link($post['Post']['title'],array('controller' => 'posts', 'action' => 'view', $post['Post']['id'])); ?> </td> <td><?php echo $post['Post']['created']; ?></td> </tr> <?php endforeach; ?>

</table>

Esto debería ser sencillo de comprender.

20

Page 21: Tutorial Introductorio a CakePHP

Tutorial Introductorio a CakePHP Andrés Smerkin

Como habrás notado, hay una llamada a un objeto $this->Html. Este objeto es una instancia de una clase Helper HtmlHelper. CakePHP proporciona un conjunto de Helpers para ayudarte a completar acciones habituales, como por ejemplo realizar un link, crear un formulario, utilizar Javascript y Ajax de forma sencilla, etc. Puedes aprender más sobre esto en /views/helpers en otro momento. Basta con saber que la función link() generará un link HTML con el título como primer parámetro y la URL como segundo parámetro.

Cuando crees URLs en CakePHP te recomendamos emplear el formato de array. Se explica con detenimiento en la sección de Routes. Si utilizas estas rutas, podrás aprovecharte de las potentes funcionalidades de generación inversa de rutas de CakePHP en el futuro. Además puedes especificar ritas relativas a la base de tu aplicación de la forma ‘/controlador/accion/param1/param2’.

Llegados a este punto, deberías poder ver esta página si escribes la ruta a tu aplicación en el navegador, normalmente será algo asi http://localhost/blog/posts/index. Deberías ver los posts correctamente formateados en una tabla.

Verás que si pinchas sobre alguno de los enlaces que aparecen en esta página (que van a una URL ‘/posts/view/some_id’, verás una página de error que te indica que la acción view() no ha sido definida todavía, y que debes definirla en el archivo PostsController. Si no ves ese error, algo ha ido mal, ya que esa acción no está definida y debería mostrar la página de error correspondiente. Cosa muy rara. Creemos esta acción para evitar el error:

<?phpclass PostsController extends AppController { public $helpers = array('Html', 'Form'); public $name = 'Posts';

public function index() { $this->set('posts', $this->Post->find('all')); }

public function view($id = null) { $this->Post->id = $id; $this->set('post', $this->Post->read()); }}?>

Si observas la función view(), ahora el método set() debería serte familiar. Verás que estamos usando read() en vez de find('all') ya que sólo queremos un post concreto.

Verás que nuestra función view toma un parámetro ($id), que es el ID del artículo que queremos ver. Este parámetro se gestiona automáticamente al llamar a la URL /posts/view/3, el valor ‘3’ se pasa a la función view como primer parámetro $id.

Vamos a definir la vista para esta nueva función, como hicimos antes para index() salvo que el nombre ahora será /app/View/Posts/view.ctp.

<!-- Archivo: /app/View/Posts/view.ctp -->

<h1><?php echo $post['Post']['title']?></h1>

21

Page 22: Tutorial Introductorio a CakePHP

Tutorial Introductorio a CakePHP Andrés Smerkin

<p><small>Creado: <?php echo $post['Post']['created']?></small></p>

<p><?php echo $post['Post']['body']?></p>

Verifica que ahora funciona el enlace que antes daba un error desde /posts/index o puedes ir manualmente si escribes /posts/view/1.

Añadiendo artículos (posts)Ya podemos leer de la base de datos nuestros artículos y mostrarlos en pantalla, ahora vamos a

ser capaces de crear nuevos artículos y guardarlos.

Lo primero, añadir una nueva acción add() en nuestro controlador PostsController:

<?phpclass PostsController extends AppController { public $name = 'Posts'; public $components = array('Session');

public function index() { $this->set('posts', $this->Post->find('all')); }

public function view($id) { $this->Post->id = $id; $this->set('post', $this->Post->read());

}

public function add() { if ($this->request->is('post')) { if ($this->Post->save($this->request->data)) { $this->Session->setFlash('Your post has been saved.'); $this->redirect(array('action' => 'index')); } } }}?>

Nota: Necesitas incluír el SessionComponent y SessionHelper en el controlador para poder utilizarlo. Si lo prefieres, puedes añadirlo en AppController y será compartido para todos los controladores que hereden de él.

Lo que la función add() hace es: si el formulario enviado no está vacío, intenta salvar un nuevo artículo utilizando el modelo Post. Si no se guarda bien, muestra la vista correspondiente, así podremos mostrar los errores de validación si el artículo no se ha guardado correctamente.

Cuando un usuario utiliza un formulario y efectúa un POST a la aplicación, esta información puedes accederla en $this->request->data. Puedes usar la función pr() o debug() para mostrar el contenido de esa variable y ver la pinta que tiene.

22

Page 23: Tutorial Introductorio a CakePHP

Tutorial Introductorio a CakePHP Andrés Smerkin

Utilizamos el SessionComponent, concretamente el método SessionComponent::setFlash() para guardar el mensaje en la sesión y poder recuperarlo posteriormente en la vista y mostrarlo al usuario, incluso después de haber redirigido a otra página mediante el método redirect(). Esto se realiza a través de la función SessionHelper::flash que está en el layout, que muestra el mensaje y lo borra de la sesión para que sólo se vea una vez. El método Controller::redirect del controlador nos permite redirigir a otra página de nuestra aplicación, traduciendo el parámetro array('action' => 'index) a la URL /posts, y la acción index. Puedes consultar la documentación de este método aquí Router::url(). Verás los diferentes modos de indicar la ruta que quieres construir.

Al llamar al método save(), comprobará si hay errores de validación primero y si encuentra alguno, no continuará con el proceso de guardado. Veremos a continuación cómo trabajar con estos errores de validación.

Validando los datosCakePHP te ayuda a evitar la monotonía al construir tus formularios y su validación. Todos

odiamos teclear largos formularios y gastar más tiempo en reglas de validación de cada campo. CakePHP está aquí para echarnos una mano.

Para aprovechar estas funciones es conveniente que utilices el FormHelper en tus vistas. La clase FormHelper está disponible en tus vistas por defecto mediante llamadas del estilo $this->Form.

Nuestra vista sería así

<!-- Archivo: /app/View/Posts/add.ctp -->

<h1>Nuevo Post</h1><?phpecho $this->Form->create('Post');echo $this->Form->input('title');echo $this->Form->input('body', array('rows' => '3'));echo $this->Form->end('Save Post');?>

Hemos usado FormHelper para generar la etiqueta ‘form’. Esta llamada al FormHelper : $this->Form->create() generaría el siguiente código

<form id="PostAddForm" method="post" action="/posts/add">

Si create() no tiene parámetros al ser llamado, asume que estás creando un formulario que realiza el submit al método del controlador add() o al método edit() si hay un id en los datos del formulario. Por defecto el formulario se enviará por POST.

Las llamadas $this->Form->input() se usan para crear los elementos del formulario con el nombre que se pasa por parámetro. El primer parámetro indica precisamente el nombre del campo del modelo para el que se quiere crear el elemento de entrada. El segundo parámetro te permite definir muchas otras variables sobre la forma en la que se generará este input field. Por ejemplo, al enviar array('rows' => '3') estamos indicando el número de filas para el

23

Page 24: Tutorial Introductorio a CakePHP

Tutorial Introductorio a CakePHP Andrés Smerkin

campo textarea que vamos a generar. El método input() está dotado de introspección y un poco de magia, ya que tiene en cuenta el tipo de datos del modelo al generar cada campo.

Una vez creados los campos de entrada para nuestro modelo, la llamada $this->Form->end() genera un botón de submit en el formulario y cierra el tag <form>. Puedes ver todos los detalles aquí /views/helpers.

Volvamos atrás un minuto para añadir un enlace en /app/View/Post/index.ctp que nos permita agregar nuevos artículos. Justo antes del tag <table> añade la siguiente línea

<?php echo $this->Html->link('Nuevo Post', array('controller' => 'posts', 'action' => 'add')); ?>

Te estarás preguntando: ¿ Cómo le digo a CakePHP la forma en la que debe validar estos datos ? Muy sencillo, las reglas de validación se escriben en el modelo. Abre el modelo Post y vamos a escribir allí algunas reglas sencillas :

<?phpclass Post extends AppModel { public $name = 'Post';

public $validate = array( 'title' => array( 'rule' => 'notEmpty' ), 'body' => array( 'rule' => 'notEmpty' ) );}

El array $validate contiene las reglas definidas para validar cada campo, cada vez que se llama al método save(). En este caso vemos que la regla para ambos campos es que no pueden ser vacíos notEmpty. El conjunto de reglas de validación de CakePHP es muy potente y variado. Podrás validar direcciones de email, codificación de tarjetas de crédito, incluso añadir tus propias reglas de validación personalizadas. Para más información sobre esto /models/data-validation.

Ahora que ya tienes las reglas de validación definidas, usa tu aplicación para crear un nuevo artículo con un título vacío y verás cómo funcionan. Como hemos usado el método FormHelper::input(), los mensajes de error se construyen automáticamente en la vista sin código adicional.

Editando PostsSeguro que ya le vas cogiendo el truco a esto. El método es siempre el mismo: primero la acción

en el controlador, luego la vista. Aquí está el método edit():

<?phpfunction edit($id = null) {

24

Page 25: Tutorial Introductorio a CakePHP

Tutorial Introductorio a CakePHP Andrés Smerkin

$this->Post->id = $id; if ($this->request->is('get')) { $this->request->data = $this->Post->read(); } else { if ($this->Post->save($this->request->data)) { $this->Session->setFlash('Your post has been updated.'); $this->redirect(array('action' => 'index')); } }}

Esta acción primero comprueba que se trata de un GET request. Si lo es, buscamos un Post con el id proporcionado como parámetro y lo ponemos a disposición para usarlo en la vista. Si la llamada no es GET, usaremos los datos que se envíen por POST para intentar actualizar nuestro artículo. Si encontramos algún error en estos datos, lo enviaremos a la vista sin guardar nada para que el usuario pueda corregirlos.

La vista quedará así:

<!-- Archivo: /app/View/Posts/edit.ctp -->

<h1>Editar Post</h1><?php echo $this->Form->create('Post', array('action' => 'edit')); echo $this->Form->input('title'); echo $this->Form->input('body', array('rows' => '3')); echo $this->Form->input('id', array('type' => 'hidden')); echo $this->Form->end('Guardar Post');?>

Mostramos el formulario de edición (con los valores actuales de ese artículo), junto a los errores de validación que hubiese.

Una cosa importante, CakePHP asume que estás editando un modelo si su id está presente en su array de datos. Si no hay un ‘id’ presente, CakePHP asumirá que es un nuevo elemento al llamar a la función save(). Puedes actualizar un poco tu vista ‘index’ para añadir los enlaces de edición de un artículo específico:

<!-- Archivo: /app/View/Posts/index.ctp (edit links added) -->

<h1>Posts</h1><p><?php echo $this->Html->link("Nuevo Post", array('action' => 'add')); ?></p><table> <tr> <th>Id</th> <th>Título</th> <th>Acción</th> <th>Creado</th> </tr>

25

Page 26: Tutorial Introductorio a CakePHP

Tutorial Introductorio a CakePHP Andrés Smerkin

<!-- Aquí es donde loopeamos nuestro arreglo de $posts mostrando la información -->

<?php foreach ($posts as $post): ?> <tr> <td><?php echo $post['Post']['id']; ?></td> <td> <?php echo $this->Html->link($post['Post']['title'], array('action' => 'view', $post['Post']['id']));?> </td> <td> <?php echo $this->Form->postLink( 'Borrar', array('action' => 'delete', $post['Post']['id']), array('confirm' => 'Está seguro?') )?> <?php echo $this->Html->link('Edit', array('action' => 'edit', $post['Post']['id']));?> </td> <td><?php echo $post['Post']['created']; ?></td> </tr><?php endforeach; ?>

</table>

Borrando ArtículosVamos a permitir a los usuarios que borren artículos. Primero, el método en nuestro controlador:

<?phpfunction delete($id) { if (!$this->request->is('post')) { throw new MethodNotAllowedException(); } if ($this->Post->delete($id)) { $this->Session->setFlash('El Post con el ID: ' . $id . ' ha sido eliminado.'); $this->redirect(array('action' => 'index')); }}

Este método borra un artículo cuyo ‘id’ enviamos como parámetro y usa $this->Session->setFlash() para mostrar un mensaje si ha sido borrado. Luego redirige a ‘/posts/index’. Si el usuario intenta borrar un artículo mediante una llamada GET, generaremos una excepción. Las excepciónes que no se traten, serán procesadas por CakePHP de forma genérica, mostrando una bonita página de error. Hay muchas excepciones a tu disposición /development/exceptions que puedes usar para informar de diversos problemas típicos.

Como estamos ejecutando algunos métodos y luego redirigiendo a otra acción de nuestro controlador, no es necesaria ninguna vista (nunca se usa). Lo que si querrás es actualizar la vista index.ctp para incluír el ya habitual enlace:

26

Page 27: Tutorial Introductorio a CakePHP

Tutorial Introductorio a CakePHP Andrés Smerkin

<!-- Archivo: /app/View/Posts/index.ctp -->

<h1>Posts</h1><p><?php echo $this->Html->link('Nuevo Post', array('action' => 'add')); ?></p><table> <tr> <th>Id</th> <th>Título</th> <th>Acciones</th> <th>Creado</th> </tr>

<!-- Aquí es donde loopeamos el arreglo de $posts mostrando toda la información -->

<?php foreach ($posts as $post): ?> <tr> <td><?php echo $post['Post']['id']; ?></td> <td> <?php echo $this->Html->link($post['Post']['title'], array('action' => 'view', $post['Post']['id']));?> </td> <td> <?php echo $this->Form->postLink( 'Borrar', array('action' => 'delete', $post['Post']['id']), array('confirm' => 'Está Seguro?')); ?> </td> <td><?php echo $post['Post']['created']; ?></td> </tr> <?php endforeach; ?>

</table>

Nota: Esta vista utiliza el FormHelper para pedir confirmación al usuario antes de borrar un artículo. Además el enlace para borrar el artículo se construye con Javascript para que se realice una llamada POST.

Rutas (Routes)En muchas ocasiones, las rutas por defecto de CakePHP funcionan bien tal y como están. Los

desarroladores que quieren rutas diferentes para mejorar la usabilidad apreciarán la forma en la que CakePHP relaciona las URLs con las acciones de los controladores. Vamos a hacer cambios ligeros para este tutorial.

Para más información sobre las rutas, visita esta referencia routes-configuration.

Por defecto CakePHP responde a las llamadas a la raíz de tu sitio (por ejemplo www.example.com/) usando el controlador PagesController, y la acción ‘display’/’home’. Esto muestra la página de bienvenida con información de CakePHP que ya has visto. Vamos a cambiar esto mediante una nueva regla.

27

Page 28: Tutorial Introductorio a CakePHP

Tutorial Introductorio a CakePHP Andrés Smerkin

Las reglas de enrutamiento están en /app/Config/routes.php. Comentaremos primero la regla de la que hemos hablado:

<?phpRouter::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));

Como habíamos dicho, esta regla conecta la URL ‘/’ con el controlador ‘pages’ la acción ‘display’ y le pasa como parámetro ‘home’, así que reemplazaremos esta regla por esta otra:

<?php Router::connect('/', array('controller' => 'posts', 'action' => 'index'));

Ahora la URL ‘/’ nos llevará al controlador ‘posts’ y la acción ‘index’.

Nota

CakePHP también calcula las rutas a la inversa. Si en tu código pasas el array array('controller' => 'posts', 'action' => 'index') a una función que espera una url, el resultado será ‘/’. Es buena idea usar siempre arrays para configurar las URL, lo que asegura que los links irán siempre al mismo lugar.

ConclusiónLa realización de este tutorial, si bien resulta muy explicativo sobre las funcionalidades del

framework, resulta muy básico para utilizarlo en el desarrollo de aplicaciones reales. Aunque a partir de aquí, te encontrarás mucho más orientado para la utilización de la documentación oficial del framework.

Puedes consultar toda la documentación completa del framework en el Book oficial http://book.cakephp.org y en la Api http://api.cakephp.org.

28