| Despabilando la MonoNeurona::Internet es de todos [Inicio] [Regresar] |
|
Server Side \ miniBlog con CakePHP Este artículo ha sido consultado en 950 ocasiones. Un miniblog en CakePHP 1.2Paquetes necesarios para el ejercicio: $sudo apt-get install apache2 libapache2-mod-php5 postgresql php5-pgsql subversion Nota: en este tutorial utilizo los términos "método" y "acción" de manera indistinta. Con este término me refiero a las acciones del controlador de CakePHP. Es decir: http:/server.org/controller/action/. Este es un ejemplo de como crear una aplicación con CakePHP 1.2. Para hacer este ejercico se debe haber leído la documentación de CakePHP y la documentación temporal de la versión 1.2 además de este repaso. Se deben tener claros los tipos de relaciones que existen: hasMany, hasOne, belongsTo y HABTM. Se puede consultar este repositorio para ver ejemplos. Es buena idea hacer una conexión básica entre php5 y Postgresql para confirmar que el ambiente de desarrollo funciona de manera correcta. CakePHP 1.2 está en desarrollo por lo cual lo mejor es tener lo último del repositorio: $svn co https://svn.cakephp.org/repo/branches/1.2.x.x/ /home/pepe/cake Debemos editar el archivo /etc/apache2/sites-enabled/000-default y cambiar todo donde dice /var/www/cake/app/webroot/ a /home/pepe/cake/app/webroot. webroot es el direorio público de CakePHP, en este directorio es donde ponemos las imágenes, PDF's o CSS que necesitemos. Debemos asegurarnos que los módulos rewrite y php5 están activados: #a2enmod rewrite && a2enmod php5 && /etc/init.d/apache2 restart En Firefox nos ponemos en http://localhost y debemos ver los típicos mensajes de CakePHP 1.2 y tambián veremos la advertencia: Please change the value of 'Security.salt' in app/config/core.php Esta cadena es la que genera la sessión de seguridad de la aplicación por lo cual nunca debe haber dos cadenas iguales. Abrimos con nuestro editor favorito ( láase emacs o Jedit ) el archivo app/config/core.php y agregamos algunas letras y núÂmeros a la cadena Security.salt. En el archivo core.php tambián tenemos la variable debug que especifica que tantos mensajes de debug aparecen en pantalla. En aplicaciones en desarrollo se debe tener el debug en 1 (sólo errores) o en 2 (errores y consultas SQL): Configure::write('debug', 2); En aplicaciones en producción el debug por seguridad debe estar deshabilitado, es decir: 0. Creamos la base de datos e ingresamos a ella: $createdb -E UNICODE DBMYBLOG && psql DBMYBLOG Editamos el archivo app/config/database.php.default y el array default debe verse así: public $default = array( lo salvamos como database.php y al recargar localhost ya debe verse el mensaje: 'Cake is able to connect to the database'. En este caso vamos a crear un mini-Blog usando la base de datos PostgreSQL, es difícil entender porque la gente usa MySQL voluntariamente. MySQL es una buena base de datos, pero despuás de todo, inferior a PostgreSQL. Esta aplicación que vamos a crear es sencilla: un usuario agrega y publica noticias en su blog. Las noticias estáÂn organizadas en categorías que el mismo usuario crea y gestiona. Necesitamos algunas tablas para guardar la información, corta y pega del navegador a tu consola las tres tablas siguientes: CREATE TABLE users ( Nota que debes crear la tabla themes primero pues la tabla entries depende de ella. Como se puede notar, seguimos la convención de CakePHP de nombrar las tablas en plural. Tambián es una buena costumbre nombrar las en inglés. Nota que en la tabla "entries" la columna themes_id es una foreign key con la indicación "ON DELETE CASCADE", es decir que si se borra el tema tambián se borrarán las entradas relacionadas a este tema. Esto lo decide el diseñÂo de la BD y el tema está más allá de este tutorial. INSERT INTO users (id, username, pwd, email, blogname, name) VALUES (1, 'repostero', '3916784b451c011b7ec822fb9bb66cfc3b5dbf0e', 'spam@nojodas.com', 'El rincon del repostero', 'Manuel Montoya'); -- pwd = karamelo INSERT INTO themes (id, title) VALUES (1, 'Historia de México'); El modelo sirve entre otras cosas para consultar la información a la BD, asi que ncesitamos crear el modelo Entry para la tabla entries, en CakePHP los modelos son en singular: < ? p h p /* El modelo para entries*/ En el modelo reflejamos las asociaciones de la base de datos: por un lado decimos que cada Entry pertenece (belongsTo) a la categoría definida en el modelo Theme y por otro lado declaramos que cada Entry puede tener muchos (hasMany) comentarios en el modelo Comment. Ahora creamos el controlador, los controlados van en el directorio app/controllers/ en este caso el archivo se llama entries_controller.php: < ? p h p /** Mi Nombre, correo y licencia aqui */ $order = 'id DESC'; // ordena del más reciente al m&ás viejo El método findAll() busca todos los registros del modelo Entry, los coloca en la variable $data y esta varaible la pasa a la vista con el método set() del controlador. Ya solo nos falta crear la vista para el mátodo display() del controlador entries_controller.php, las vistas van en el directorio app/views/controller/method.ctp. La extensión es .ctp por "Cake Template". En este caso: /app/views/entries/display.ctp:
< h 1 >Entradas < / h1 >
< ? p h p Hay que hacer notar que tanto en el controlador como en la vista o el modelo se puede usar la función debug() para ver algún array. En la vista estoy usando el helper $html->div() que coloca una cadena en en layer. Si tu eres desarrollador web y nunca has usado helpers debo decirte una cosa: los amaras profundamente. Todo el tedio de escribir xHTML morirá si los usas. Ahora nos colocamos en http://localhost/entries/display y debemos ver esto:
Es decir el controlador ejecuta la función display(), la cual usa el modelo Entry y el resultado lo pasa ala vista donde se procesa apra mostra el resultado. RoutesUna vez que hemos creado el controlador entries con la acción display: /entries/display, es claro que este controlador/método debería ser la página de inicio de nuestra aplicación. En el archivo app/config/routes.php está definido el controlador/método por default de CakePHP. Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home')); Esta ruta específica que el controlador por default es 'pages/display' con una variable de valor 'home'. Para hacer de entries/display sea ahora nuestro 'index.php' cambiamos esta configuración a: Router::connect('/', array('controller' => 'entries', 'action' => 'display')); (No necesitamos la variable 'home'). Ahora al ir a http://localhost con nuestro navegador, CakePHP sabe que lo que debe ejecutar es /entries/display. Cooool! Colocando nuestro diseñoCakePHP busca en el directorio app/views/layouts buscando por el layout 'default.ctp' (los layouts también acaban con la extensión .ctp), si CakePHP no encuentra este layout usa uno propio. Vamos a crear nuestro layout para aplicar nuestro diseño. Guardamos este archivo como app/views/layouts/portal.ctp. (Si ya sé que los diseños no se hacen con tablas para este es un ejemplo). La parte más importante es la variable $content_for_layout, que es el que integra el resultado de la vista con el layout. También está echo $html->css("portal");, es decir que debes tener el archivo app/webroot/css/portal.css que es este. Cada método de un controlador puede tener un layout diferente, debemos modificar dos atributos de nuestro mètodo display debemos agregar: $ this - > layout = 'portal'; Una vez hecho esto, al recargar nuestra página debemos ver algo asi:
Continuar con "Auth Component" >> Última actualización: 2008-03-29 17:57:00-06 |
| Este trabajo está licenciado bajo la MonoNeurona Commons License. 2002-2008 © :: Colectivo MonoNeurona.org :: |