You are on page 1of 28

Tutorial Introductorio a CakePHP

Andrs Smerkin

ndice
Introduccin..........................................................................................................................................3 Sobre este tutorial............................................................................................................................3 Qu es CakePHP?..........................................................................................................................3 Por qu usar CakePHP.....................................................................................................................3 Modelo Vista Controlador..........................................................................................................4 Primeros pasos con CakePHP..............................................................................................................7 Modelos (Models)............................................................................................................................7 Controladores (Controllers).............................................................................................................8 Vistas (Views)..................................................................................................................................9 Comportamientos (Behaviors).......................................................................................................10 Ayudantes (Helpers).......................................................................................................................11 Componentes (Components) .........................................................................................................11 Ejemplo: Un Blog...............................................................................................................................12 Introduccin...................................................................................................................................12 Descargar CakePHP.......................................................................................................................12 Creando la base de datos para nuestro blog...................................................................................13 Configurando la Base de Datos.....................................................................................................14 Configuracin Opcional.................................................................................................................14 Sobre mod_rewrite.........................................................................................................................15 Creando un modelo para los artculos (Post Model)......................................................................16 Crear un Controlador para nuestros Artculos (Posts)...................................................................17 Creando una vista para los artculos (View)..................................................................................18 Aadiendo artculos (posts)...........................................................................................................21 Validando los datos........................................................................................................................22 Editando Posts................................................................................................................................23 Borrando Artculos.........................................................................................................................25 Rutas (Routes)................................................................................................................................26 Conclusin.....................................................................................................................................27

Tutorial Introductorio a CakePHP

Andrs Smerkin

Introduccin
Sobre este tutorial
Este tutorial tiene como intencin brindarte un pantallazo general del framework CakePHP, en conjunto con un ejemplo (mayormente tomado de la documentacin 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 documentacin oficial y sacarle el jugo a esta fantstica herramienta. El tutorial cuenta principalmente con dos partes: la primera es una explicacin sobre los rudimentos de CakePHP y la segunda es un ejemplo muy sencillo sobre la implementacin de un Blog. Si eres de esas personas que les gusta comenzar embarrndose las manos pues te recomiendo que vayas directamente al ejemplo y vuelvas para atrs 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 peticin inicial del usuario hasta la construccin del cdigo HTML final. Como CakePHP sigue los fundamentos del patrn MVC, te permite personalizar y extender fcilmente cada una de sus partes. Este framework tambin proporciona una estructura organizacional: desde los nombres de archivos hasta los nombres de las tablas en la base de datos. Esto mantiene tu aplicacin consistente y ordenada. Siendo un concepto sencillo, seguir las convenciones definidas te facilitar encontrar rpidamente cada cosa y aprenders en menos tiempo los fundamentos del framework.

Por qu usar CakePHP


Construir rpidamente: Puedes utilizar la generacin de cdigo y el andamiaje para construir prototipos rpidamente. Sin configuracin: Sin archivos XML o YAML complicados. Simplemente configura tu base de datos y ya ests listo para cocinar. 3

Tutorial Introductorio a CakePHP

Andrs Smerkin

Licencia amistosa: CakePHP est licenciado bajo la licencia del MIT, la cual lo hace perfecto para el uso comercial. Bateras incluidas: Todo lo que necesitas ya se encuentra dentro del framework. Traducciones, acceso a base de datos, caching, validacin, autenticacin y mucho ms. 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 aplicacin. Seguridad: CakePHP viene con un herramientas incluidas para la validacin de inputs, proteccin CSRF, proteccin de formularios, prevencin de inyecciones y prevencin XSS, para mantener tu aplicacin segura y a salvo.

Modelo Vista Controlador


CakePHP sigue la convencin del patrn de diseo de Modelo Vista Controlador. Al programar usando MVC separamos la aplicacin en tres capas principales: modelos, vistas y controladores.

La capa de modelo
La capa de modelo representa la parte de la aplicacin que implementa la lgica de negocio. Esto significa que es la responsable de obtener los datos, convertirlos a algo significativo para la aplicacin, as tambin como el procesamiento, validacin, asociaciones y cualquier otra tarea relativa con respecto a la manipulacin de esta informacin. De un simple vistazo, los objetos de modelo pueden ser visto como la primer capa de interaccin con cualquier base de datos que ests usando en la aplicacin, pero en general estos modelos son los mayores conceptos alrededor de los cuales implementas tu aplicacin (son elementos del dominio de la aplicacin). En el caso de una red social, por ejemplo, la capa de modelos debera tener en cuenta tareas tales como el guardado de los datos de usuario, las asociaciones entre amigos, la manipulacin de fotografas, la bsqueda de nuevos amigos a partir de recomendaciones, etc. En este caso, los modelos podran ser Amigo, Usuario, Comentario, Foto.

La capa de vista
La capa de vista muestra una presentacin de informacin modelada. La vista es la responsable de producir interfaces presentables que puedan ser necesarias a partir de la informacin disponible en la aplicacin. Por ejemplo, como la capa de modelo devuelve un conjunto de datos, la vista los utilizara 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 representacin en texto de los datos, sino que tambin puede ser utilizada para generar una gran cantidad de otros formatos dependiendo de las necesidades, tales como videos, msica, documentos y cualquier otro formato que puedas imaginarte.

Tutorial Introductorio a CakePHP

Andrs 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 autenticacin y autorizacin, delegan procesamiento y obtencin 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 tpico de una peticin en CakePHP Una peticin tpica en CakePHP comienza con un usuario solicitando una pgina o un recurso en la aplicacin. Esta peticin es procesada en primer lugar por un dispatcher, el cual se encarga de seleccionar el controlador correcto para manejarla. Una vez que la peticin llega al controlador, este se comunicar con la capa de modelos para procesar cualquier dato utilizando operaciones de obtencin o guardado segn sea necesario. Despus de que esta comunicacin 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 aplicacin seguirn este patrn bsico. Aadiremos algunos detalles ms adelante, los cuales son especficos de CakePHP.

Beneficios
Por qu utilizar MVC? Porque es un patrn de diseo de software probado que convierte una aplicacin en algo mantenible, modularizable y de rpido desarrollo. Maquetar una aplicacin en modelos, vistas y controladores separados vuelve a una aplicacin muy liviana. Caractersticas nuevas pueden ser aadidas fcilmente, y agregar nuevas vistas a viejas caractersticas es un proceso simple de realizar. El diseo modular y separado tambin permite que los desarrolladores y 5

Tutorial Introductorio a CakePHP

Andrs Smerkin

los diseadores trabajen en simultaneo, incluyendo la posibilidad de prototipar rpidamente. La separacin tambin permite que los desarrolladores realicen cambios simultneamente en una parte de la aplicacin sin afectar a las otras. Si nunca has construido una aplicacin de esta manera, toma algn tiempo acostumbrarse, pero una vez que te acostumbras al proceso, no querrs hacerlo de otra forma.

Tutorial Introductorio a CakePHP

Andrs Smerkin

Primeros pasos con CakePHP


Modelos (Models)
Los modelos son las clases que definen la lgica de negocio dentro de la aplicacin. Esto significa que los modelos son los responsables de administrar casi cualquier cosa que pase con los datos, tales como validacin, interacciones y la evolucin del flujo de la informacin en el dominio de trabajo. Usualmente, en CakePHP, los modelos representan datos y son utilizados en CakePHP para el acceso a estos datos. Ms especficamente, 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 pequeo ejemplo de un modelo en CakePHP
<?php class Ingredient extends AppModel { public $name = 'Ingredient'; }

Con esta simple declaracin, el modelo Ingredient es provisto con todas las funcionalidades que se necesitan para crear consultas, as tambin como para guardar y borrar datos. Estos mtodos especiales vienen desde las clases de modelo de CakePHP a travs de la herencia. El modelo Ingredient extiende el modelo de la aplicacin (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 vaca y es la que permite definir funcionalidad que 7

Tutorial Introductorio a CakePHP

Andrs Smerkin

se encontrar disponible en todos los modelos dentro de la aplicacin. Para hacer esto, debes crear tu propio AppModel.php dentro del directorio Model de la aplicacin. Para que el modelo Ingredient funcione, debemos crear el archivo php dentro del directorio /app/Model/ . Por convencin, el archivo debe tener el mismo obre que la clase. Para este ejemplo sera Ingredient.php. CakePHP crear dinmicamente un objeto Ingredient. Una vez definido, el modelo puede ser accedido desde el Controlador. CakePHP automticamente pondr el modelo a disponibilidad para accederlo cuando el nombre sea igual al del controlador. Por ejemplo, un controlador llamado IngredientsController automticamente inicializar el modelo Ingredient y lo adjuntar al controlador como $this>Ingredient. 1

<?php class 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 peticin ha sido aplicado y que el controlador correcto se ha encontrado, se llama una accin de controlador. El controlador debe manipular la interpretacin 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 ms fcilmente el cdigo y a hacerlo ms legible. Usualmente, los controladores son utilizados para manejar la lgica alrededor de un solo modelo. Por ejemplo, para el modelo Ingredient tenamos el controlador IngredientsController. En cakePHP, los controladores son nombrados segn el modelo primario que manejan, aunque es totalmente posible hacer que los controladores manejen ms de un modelo. Los controladores de aplicacin extienden de la clase AppController, la cual a su vez extiende de la clase del ncleo Controller. El AppController puede ser definido dentro de /app/Controller/AppController.php y debera contener los mtodos que son compartidos entre todos los controladores de aplicacin.
<?php class AppController extends Controller { }

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

Tutorial Introductorio a CakePHP

Andrs Smerkin

Los controladores proveen un nmero de mtodos que son llamados acciones. Las acciones son mtodos en un controlador que manejan peticiones. Por defecto, todos los mtodos pblicos 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 tambin existen otras formas de crear respuestas.

<?php # /app/Controller/RecipesController.php class RecipesController extends AppController { public function view($id) { //La lgica de la accin va aqu } public function share($customerId, $recipeId) { //La lgica de la accin va aqu } public function search($query) { //La lgica de la accin va aqu } }

En el ejemplo anterior, el RecipesController contiene las acciones view(), share() y search(). Veremos ms sobre controladores en el ejemplo final2.

Vistas (Views)
Las vistas son las responsables de generar la salida especfica solicitada por la peticin. Casi siempre resulta ser HTML, XML o JSON, pero el crear archivos PDF y el streaming que los usuarios visualicen tambin es responsabilidad de la capa de vistas. CakePHP viene con algunas clases incorporadas para la manipulacin del renderizado de los escenarios ms comunes: Para crear webservices en XML o JSON Para servir archivos protegidos, o generados dinmicamente, pueden utilizarse Media Views Para crear temas visuales, se pueden utilizar Themes.

View Templates
La capa de vista de CakePHP es el cmo le hablas a los usuarios. La mayora de las veces tus vistas mostrarn documentos en HTML a los navegadores, pero tambin podras necesitar servir datos AMF a un objeto de flash, responder a una aplicacin remota va SOAP o generar un archivo CSV para un usuario.
2 Puedes consultar ms informacin sobre controladores en http://book.cakephp.org/2.0/en/controllers.html

Tutorial Introductorio a CakePHP

Andrs Smerkin

Por defecto, los archivos de vistas de CakePHP son escritos en PHP plano y tienen la extensin .ctp. Estos archivos contienen la lgica 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 cuestin, y el con el nombre de la accin a la que corresponde. Por ejemplo, la vista view() para el controlador ProductsController, normalmente se ubicara 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 pgina que es nica a la accin que se est corriendo. Forman la parte principal de las respuestas de la aplicacin. elementos: Son pequeos trozos de cdigos reutilizables en las vistas. Los elementos son renderizados dentro de las vistas. layouts: Los archivos de vista que contienen lgica presentacional y que envuelven muchas interfaces de la aplicacin. Las mayora de las vistas son renderizadas dentro de un layout. helpers: Estas clases encapsulan lgica 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 ms adelante a los ayudantes.

Elementos
La mayora de las aplicaciones contienen pequeos bloques de cdigo presentacional que necesita repetirse de pgina a pgina, 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, menes extras, formularios de login y llamadas extra generalmente son implementados como elementos de CakePHP. Un elemento es bsicamente 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 ms legible.

Comportamientos (Behaviors)
Los comportamientos son una forma de organizar la funcionalidad definida en los modelos. Los comportamientos permiten separar y reutilizar lgica que crea un tipo de comportamiento especfico, 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 podra no ser parte de la lgica del negocio que se est modelando, o que es necesaria en mltiples modelos y por lo tanto necesita ser extrapolada. Por ejemplo, considera un modelo que te da acceso a una base de datos que almacena informacin estructural sobre un rbol. Remover, aadir y migrar nodos en un rbol no es tan simple como borrar, insertar y editar filas en una tabla. Muchas tuplas necesitaran ser actualizadas 10

Tutorial Introductorio a CakePHP

Andrs Smerkin

mientras se mueven cosas de lugar. Ms que crear mtodos de manipulacin de rbol en cada modelo, podramos simplemente decirle a nuestro modelo que utilice el comportamiento de rbol TreeBehavior, o en trminos ms formales, que se comporte como un rbol. Esto es conocido como adjuntar un comportamiento a un modelo. Con una simple linea de cdigo, nuestros modelos en CakePHP obtienen un completo conjunto de mtodos 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 ms informacin sobre comportamientos, puede consultar la documentacin oficial4.

Ayudantes (Helpers)
Los ayudantes son clases que permiten compartir lgica entre muchas vistas de la capa de presentacin (view layer). Los ayudantes contienen lgica presentacional que es compartida entre muchas vistas, elementos o layouts. CakePHP contiene un nmero de ayudantes que asisten en la creacin de vistas. Ellos asisten en crear cdigo de marcas bien formado (incluyendo formularios), asisten en el formateo de texto, fechas y nmeros, e inclusive pueden acelerar funcionalidad Ajax. Para ms informacin, el book de CakePHP contiene una lista completa5. Para ms informacin, puedes consultar la documentacin oficial sobre Ayudantes6.

Componentes (Components)
Los componentes son paquetes de lgica compartida entre todos los controladores. Si en algn momento te encuentras copiando y pegando cdigo entre controladores, tal vez sea una buena idea envolver algunas funcionalidades en un componente. CakePHP viene con un conjunto fantstico de componentes del ncleo que puedes usar: Seguridad Sesiones Listas de Control de Accesos Emails Cookies Autenticacin Manipulacin de peticiones Paginacin

3 4 5 6

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

11

Tutorial Introductorio a CakePHP

Andrs Smerkin

Cada uno de estos componentes del ncleo se encuentran detallados en el manual oficial7.

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

12

Tutorial Introductorio a CakePHP

Andrs Smerkin

Ejemplo: Un Blog
Introduccin
En este tutorial vamos a crear un blog sencillo desde cero. Empezaremos descargando e instalando CakePHP, luego crearemos una base de datos y el cdigo necesario para listar, aadir, editar o borrar artculos del blog. Esto es lo que necesitas: 1. Servidor web funcionando. Asumiremos que ests usando Apache, aunque las instrucciones para otros servidores son similares. Igual tendremos que ajustar un poco la configuracin inicial, pero todos los pasos son sencillos. La mayor parte de nosotros podr tener CakePHP funcionando sin tocar nada en su configuracin. 2. Base de datos funcionando. Usaremos MySQL en este tutorial. Necesitars saber cmo crear una base de datos nueva. CakePHP se encargar del resto. 3. Nivel bsico de PHP. Si ests familiarizado con la programacin orientada a objetos, mucho mejor. An as puedes seguir desarrollando con tu estilo procedimental si lo prefieres. 4. Conocimiento sobre patrn MVC. Puedes encontrar una definicin rpida en este tutorial. Vamos all !

Descargar CakePHP
Vamos a descargar la ltima versin de CakePHP. Para ello, visita la web del proyecto en github: http://github.com/cakephp/cakephp/downloads y descarga la ltima versin de la rama 2.0 Tambin puedes clonar el repositorio git://github.com/cakephp/cakephp.git usando git. git clone

Usa el mtodo 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 debera tener esta estructura8:

Puedes consultar ms sobre la estructura de directorios de CakePHP en http://book.cakephp.org/2.0/es/gettingstarted/cakephp-folder-structure.html

13

Tutorial Introductorio a CakePHP


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

Andrs Smerkin

Creando la base de datos para nuestro blog


Vamos 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 slo una tabla para nuestros artculos (posts). Adems crearemos algunos artculos de test para usarlos luego. Una vez creada la tabla, ejecuta el siguiente cdigo 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 eleccin 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 dems convenciones en tus clases, aprovechars la potencia del framework y ahorrars mucho trabajo de configuracin. 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 ahorrarn tiempo. Al llamar posts a nuestra tabla de artculos, estamos diciendo a CakePHP que vincule esta tabla por defecto al Modelo Post, e incluir los campos modified y created con ese nombre, sern automticamente administrados por CakePHP.

Para leer ms sobre las convenciones de la base de datos, visita http://book.cakephp.org/2.0/es/gettingstarted/cakephp-conventions.html

14

Tutorial Introductorio a CakePHP

Andrs Smerkin

Configurando la Base de Datos


Rpido y sencillo, vamos a decirle a CakePHP dnde est la Base de Datos y cmo conectarnos a ella. Probablemente sta ser la primera y ltima vez que lo hagas en cada proyecto. Hay un archivo de configuracin preparado para que slo tengas que copiarlo y modificarlo con tu propia configuracin. Cambia el nombre del archivo /app/Config/database.php.default /app/Config/database.php (hemos eliminado el .default del final). por

Edita ahora este archivo y vers un array definido en la variable $default que contiene varios campos. Modifica esos campos para que se correspondan con tu configuracin actual de acceso a la Base de Datos. Debera quedarte algo similar a esto:
public $default = array( 'datasource' => 'Database/Mysql', 'persistent' => false, 'host' => 'localhost', 'port' => '', 'login' => 'cakeBlog', 'password' => 'c4k3-rUl3Z', 'database' => 'cake_blog_tutorial', 'schema' => '', 'prefix' => '', 'encoding' => '' );

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

Configuracin Opcional
Hay 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 parmetros. 1. Configurar un string de seguridad salt para usarlo al realizar los hash. 2. Configurar un nmero 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 generacin de hashes. Cambia el valor inicial y escribe cualquier cosa diferente. Cualquier cosa vale. Para cambiarlo vete a la lnea 203 del archivo /app/Config/core.php y vers algo as:

15

Tutorial Introductorio a CakePHP


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

Andrs Smerkin

El nmero semilla se utiliza para encriptar y desencriptar cadenas. Cambia el valor por defecto en el ficharo /app/Config/core.php lnea 208. No importa qu numero pongas, que sea difcil 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 pgina de bienvenida, siempre que tengas activado el modo depuracin, por defecto est activo.

Sobre mod_rewrite
Si eres nuevo usuario de apache, puedes encontrar alguna dificultad con mod_rewrite, as que lo trataremos aqu. Si al cargar la pgina de bienvenida de CakePHP ves cosas raras (no se cargan las imgenes ni los estilos y se ve todo en blanco y negro), esto significa que probablemente la configuracin necesita ser revisada en el servidor apache. Prueba lo siguiente: 1. Asegrate de que existe la configuracin para procesar los archivos .htaccess. En el archivo de configuracin de apache: httpd.conf debera existir una seccin para cada Directory de tu servidor. Asegrate de que AllowOverride est fijado a All para el directorio que contiene tu aplicacin web. Para tu seguridad, es mejor que no asignes All a tu directorio raz <Directory /> sino que busques el bloque <Directory> que se refiera al directorio en el que tienes instalada tu aplicacin web. 2. Asegrate que ests editando el archivo httpd.conf correcto, ya que en algunos sistemas 16

Tutorial Introductorio a CakePHP

Andrs Smerkin

hay archivos de este tipo por usuario o por aplicacin web. Consulta la documentacin de apache para tu sistema. 3. Comprueba que existen los archivos .htaccess en el directorio en el que est instalada tu aplicacin web. A veces al descomprimir el archivo o al copiarlo desde otra ubicacin, estos archivos no se copian correctamente. Si no estn ah, obtn otra copia de CakePHP desde el servidor oficial de descargas. 4. Asegrate de tener activado el mdulo mod_rewrite en la configuracin de apache. Deberas tener algo as:
LoadModule rewrite_module (para apache 1.3):: AddModule mod_rewrite.c libexec/httpd/mod_rewrite.so

en tu archivo httpd.conf

Si no puedes (o no quieres) configurar mod_rewrite o algn otro mdulo compatible, necesitars activar las url amigables en CakePHP. En el archivo /app/Config/core.php, quita el comentario a la lnea:
<?php Configure::write('App.baseUrl', env('SCRIPT_NAME'));

Borra tambin los archivos .htaccess que ya no sern necesarios:


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

Esto har que tus url sean www.example.com/index.php/nombredelcontrolador/nombredelaaccion/parametro en www.example.com/nombredelcontrolador/nombredelaaccion/parametro.

vez

as: de

Si ests instalando CakePHP en otro servidor diferente a Apache, en la documentacin encontrars instrucciones para que funcione la reescritura de URLs10.

Creando un modelo para los artculos (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 Instalacin Avanzada: http://book.cakephp.org/2.0/es/installation/advanced-installation.html

17

Tutorial Introductorio a CakePHP


<?php class Post extends AppModel { public $name = 'Post'; } ?>

Andrs Smerkin

Los convenios usados para los nombres son importantes. Cuando llamamos a nuestro modelo Post, CakePHP deducir automticamente 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 dinmicamente 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 minscula o posts.php en plural) CakePHP no va a reconocer la configuracin que escribas en ese archivo y utilizar valores por defecto. Para ms informacin sobre modelos, como prefijos para las tablas, validacin, etc. puedes visitar /models en el Manual11.

Crear un Controlador para nuestros Artculos (Posts)


Vamos a crear ahora un controlador para nuestros artculos. En el controlador es donde escribiremos el cdigo para interactuar con nuestros artculos. Es donde se utilizan los modelos para llevar a cabo el trabajo que queramos hacer con nuestros artculos. 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 aadir una accin a nuestro nuevo controlador. Las acciones representan una funcin concreta o interfaz en nuestra aplicacin. Por ejemplo, cuando los usuarios recuperan la url www.example.com/posts/index (que CakePHP tambin asigna por defecto a la ruta www.example.com/posts/ ya que la accin por defecto de cada controlador es index por convencin) esperan ver un listado de posts. El cdigo para tal accin sera este:
<?php class 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

Tutorial Introductorio a CakePHP

Andrs Smerkin

Si examinamos el contenido de la funcin index() en detalle, podemos ver que ahora los usuarios podrn acceder a la ruta www.example.com/posts/index. Adems si creramos otra funcin llamada foobar(), los usuarios podran acceder a ella en la url www.example.com/posts/foobar. Advertencia: Puede que tengas la tentacin 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 configuracin de rutas. Al escribir los archivos, te recomendamos seguir las convenciones de nombres y ser claro. Luego podrs generar las rutas que te convengan utilizando el componente de rutas (Route). La funcin index tiene slo una instruccin set() que sirve para pasar informacin desde el controlador a la vista (view) asociada. Luego crearemos esta vista. Esta funcin set() asigna una nueva variab le posts igual al valor retornado por la funcin find('all') del modelo Post. Nuestro modelo Post est disponible automticamente en el controlador y no hay que importarlo ya que hemos usado las convenciones de nombres de CakePHP. Para aprender ms sobre los controladores, puedes visitar el captulo /controllers12.

Creando una vista para los artculos (View)


Ya tenemos un modelo que define nuestros artculos y un controlador que ejecuta alguna lgica sobre ese modelo y enva los datos recuperados a la vista. Ahora vamos a crear una vista para la accin index(). Las vistas en CakePHP estn orientadas a cmo 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 tambin XML, CSV o incluso datos binarios. Las plantillas (layouts) sirven para recubrir las vistas y reutilizar cdigo. Adems pueden crearse tantos layouts como se deseen y se puede elegir cul 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 mtodo 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 Ttulo [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

Tutorial Introductorio a CakePHP


[Post] => Array ( [id] => 2 [title] => Otro ttulo [body] => Y el cuerpo que le sigue. [created] => 2008-02-13 18:34:56 [modified] => )

Andrs Smerkin

) [2] => Array ( [Post] => Array ( [id] => 3 [title] => Y Otro ttulo ms [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 debera ser sencillo de comprender. 20

Tutorial Introductorio a CakePHP

Andrs Smerkin

Como habrs 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 ms sobre esto en /views/helpers en otro momento. Basta con saber que la funcin link() generar un link HTML con el ttulo como primer parmetro y la URL como segundo parmetro. Cuando crees URLs en CakePHP te recomendamos emplear el formato de array. Se explica con detenimiento en la seccin de Routes. Si utilizas estas rutas, podrs aprovecharte de las potentes funcionalidades de generacin inversa de rutas de CakePHP en el futuro. Adems puedes especificar ritas relativas a la base de tu aplicacin de la forma /controlador/accion/param1/param2. Llegados a este punto, deberas poder ver esta pgina si escribes la ruta a tu aplicacin en el navegador, normalmente ser algo asi http://localhost/blog/posts/index. Deberas ver los posts correctamente formateados en una tabla. Vers que si pinchas sobre alguno de los enlaces que aparecen en esta pgina (que van a una URL /posts/view/some_id, vers una pgina de error que te indica que la accin view() no ha sido definida todava, y que debes definirla en el archivo PostsController. Si no ves ese error, algo ha ido mal, ya que esa accin no est definida y debera mostrar la pgina de error correspondiente. Cosa muy rara. Creemos esta accin para evitar el error:
<?php class 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 funcin view(), ahora el mtodo set() debera serte familiar. Vers que estamos usando read() en vez de find('all') ya que slo queremos un post concreto. Vers que nuestra funcin view toma un parmetro ($id), que es el ID del artculo que queremos ver. Este parmetro se gestiona automticamente al llamar a la URL /posts/view/3, el valor 3 se pasa a la funcin view como primer parmetro $id. Vamos a definir la vista para esta nueva funcin, 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

Tutorial Introductorio a CakePHP

Andrs 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.

Aadiendo artculos (posts)


Ya podemos leer de la base de datos nuestros artculos y mostrarlos en pantalla, ahora vamos a ser capaces de crear nuevos artculos y guardarlos. Lo primero, aadir una nueva accin add() en nuestro controlador PostsController:
<?php class 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 inclur el SessionComponent y SessionHelper en el controlador para poder utilizarlo. Si lo prefieres, puedes aadirlo en AppController y ser compartido para todos los controladores que hereden de l. Lo que la funcin add() hace es: si el formulario enviado no est vaco, intenta salvar un nuevo artculo utilizando el modelo Post. Si no se guarda bien, muestra la vista correspondiente, as podremos mostrar los errores de validacin si el artculo no se ha guardado correctamente. Cuando un usuario utiliza un formulario y efecta un POST a la aplicacin, esta informacin puedes accederla en $this->request->data. Puedes usar la funcin pr() o debug() para mostrar el contenido de esa variable y ver la pinta que tiene. 22

Tutorial Introductorio a CakePHP

Andrs Smerkin

Utilizamos el SessionComponent, concretamente el mtodo SessionComponent::setFlash() para guardar el mensaje en la sesin y poder recuperarlo posteriormente en la vista y mostrarlo al usuario, incluso despus de haber redirigido a otra pgina mediante el mtodo redirect(). Esto se realiza a travs de la funcin SessionHelper::flash que est en el layout, que muestra el mensaje y lo borra de la sesin para que slo se vea una vez. El mtodo Controller::redirect del controlador nos permite redirigir a otra pgina de nuestra aplicacin, traduciendo el parmetro array('action' => 'index) a la URL /posts, y la accin index. Puedes consultar la documentacin de este mtodo aqu Router::url(). Vers los diferentes modos de indicar la ruta que quieres construir. Al llamar al mtodo save(), comprobar si hay errores de validacin primero y si encuentra alguno, no continuar con el proceso de guardado. Veremos a continuacin cmo trabajar con estos errores de validacin.

Validando los datos


CakePHP te ayuda a evitar la monotona al construir tus formularios y su validacin. Todos odiamos teclear largos formularios y gastar ms tiempo en reglas de validacin 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 sera as
<!-- Archivo: /app/View/Posts/add.ctp --> <h1>Nuevo Post</h1> <?php echo $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() generara el siguiente cdigo
<form id="PostAddForm" method="post" action="/posts/add">

Si create() no tiene parmetros al ser llamado, asume que ests creando un formulario que realiza el submit al mtodo del controlador add() o al mtodo 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 parmetro. El primer parmetro indica precisamente el nombre del campo del modelo para el que se quiere crear el elemento de entrada. El segundo parmetro 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 nmero de filas para el 23

Tutorial Introductorio a CakePHP

Andrs Smerkin

campo textarea que vamos a generar. El mtodo input() est dotado de introspeccin 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 botn de submit en el formulario y cierra el tag <form>. Puedes ver todos los detalles aqu /views/helpers. Volvamos atrs un minuto para aadir un enlace en /app/View/Post/index.ctp que nos permita agregar nuevos artculos. Justo antes del tag <table> aade la siguiente lnea
<?php echo $this->Html->link('Nuevo Post', array('controller' => 'posts', 'action' => 'add')); ?>

Te estars preguntando: Cmo le digo a CakePHP la forma en la que debe validar estos datos ? Muy sencillo, las reglas de validacin se escriben en el modelo. Abre el modelo Post y vamos a escribir all algunas reglas sencillas :
<?php class 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 mtodo save(). En este caso vemos que la regla para ambos campos es que no pueden ser vacos notEmpty. El conjunto de reglas de validacin de CakePHP es muy potente y variado. Podrs validar direcciones de email, codificacin de tarjetas de crdito, incluso aadir tus propias reglas de validacin personalizadas. Para ms informacin sobre esto /models/datavalidation. Ahora que ya tienes las reglas de validacin definidas, usa tu aplicacin para crear un nuevo artculo con un ttulo vaco y vers cmo funcionan. Como hemos usado el mtodo FormHelper::input(), los mensajes de error se construyen automticamente en la vista sin cdigo adicional.

Editando Posts
Seguro que ya le vas cogiendo el truco a esto. El mtodo es siempre el mismo: primero la accin en el controlador, luego la vista. Aqu est el mtodo edit():
<?php function edit($id = null) {

24

Tutorial Introductorio a CakePHP

Andrs 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 accin primero comprueba que se trata de un GET request. Si lo es, buscamos un Post con el id proporcionado como parmetro y lo ponemos a disposicin para usarlo en la vista. Si la llamada no es GET, usaremos los datos que se enven por POST para intentar actualizar nuestro artculo. Si encontramos algn 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 edicin (con los valores actuales de ese artculo), junto a los errores de validacin que hubiese. Una cosa importante, CakePHP asume que ests 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 funcin save(). Puedes actualizar un poco tu vista index para aadir los enlaces de edicin de un artculo especfico:
<!-- 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>Ttulo</th> <th>Accin</th> <th>Creado</th> </tr>

25

Tutorial Introductorio a CakePHP

Andrs Smerkin

<!-- Aqu es donde loopeamos nuestro arreglo de $posts mostrando la informacin --> <?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 Artculos
Vamos a permitir a los usuarios que borren artculos. Primero, el mtodo en nuestro controlador:
<?php function 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 mtodo borra un artculo cuyo id enviamos como parmetro y usa $this->Session>setFlash() para mostrar un mensaje si ha sido borrado. Luego redirige a /posts/index. Si el usuario intenta borrar un artculo mediante una llamada GET, generaremos una excepcin. Las excepcines que no se traten, sern procesadas por CakePHP de forma genrica, mostrando una bonita pgina de error. Hay muchas excepciones a tu disposicin /development/exceptions que puedes usar para informar de diversos problemas tpicos. Como estamos ejecutando algunos mtodos y luego redirigiendo a otra accin de nuestro controlador, no es necesaria ninguna vista (nunca se usa). Lo que si querrs es actualizar la vista index.ctp para inclur el ya habitual enlace: 26

Tutorial Introductorio a CakePHP


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

Andrs Smerkin

<h1>Posts</h1> <p><?php echo $this->Html->link('Nuevo Post', array('action' => 'add')); ? ></p> <table> <tr> <th>Id</th> <th>Ttulo</th> <th>Acciones</th> <th>Creado</th> </tr> <!-- Aqu es donde loopeamos el arreglo de $posts mostrando toda la informacin --> <?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 confirmacin al usuario antes de borrar un artculo. Adems el enlace para borrar el artculo 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 estn. Los desarroladores que quieren rutas diferentes para mejorar la usabilidad apreciarn la forma en la que CakePHP relaciona las URLs con las acciones de los controladores. Vamos a hacer cambios ligeros para este tutorial. Para ms informacin sobre las rutas, visita esta referencia routes-configuration. Por defecto CakePHP responde a las llamadas a la raz de tu sitio (por ejemplo www.example.com/) usando el controlador PagesController, y la accin display/home. Esto muestra la pgina de bienvenida con informacin de CakePHP que ya has visto. Vamos a cambiar esto mediante una nueva regla. 27

Tutorial Introductorio a CakePHP

Andrs Smerkin

Las reglas de enrutamiento estn en /app/Config/routes.php. Comentaremos primero la regla de la que hemos hablado:
<?php Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));

Como habamos dicho, esta regla conecta la URL / con el controlador pages la accin display y le pasa como parmetro 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 accin index. Nota CakePHP tambin calcula las rutas a la inversa. Si en tu cdigo pasas el array array('controller' => 'posts', 'action' => 'index') a una funcin que espera una url, el resultado ser /. Es buena idea usar siempre arrays para configurar las URL, lo que asegura que los links irn siempre al mismo lugar.

Conclusin
La realizacin de este tutorial, si bien resulta muy explicativo sobre las funcionalidades del framework, resulta muy bsico para utilizarlo en el desarrollo de aplicaciones reales. Aunque a partir de aqu, te encontrars mucho ms orientado para la utilizacin de la documentacin oficial del framework. Puedes consultar toda la documentacin completa del framework en el Book oficial http://book.cakephp.org y en la Api http://api.cakephp.org.

28

You might also like