lunes, 11 de agosto de 2008

Symfony La Primera Experiencia

En este blog encontraras un relato de como fue nuestra primera experiencia con symfony la presentación hecha sobre los principales rasgos de symfony y un video tutorial de como instalar y crear la aplicación, la encontraras en los siguientes links:
http://es.geocities.com/yeice8/Symfony.ppt
http://es.geocities.com/yeice8/SymfonyAplication1.zip
http://es.geocities.com/yeice8/SymfonyAplication2.zip


Todo empezó como una simple tarea de clase un 15 de julio de 2008… teníamos una exposición y necesitábamos decidirnos por un framework para exponer… casi sin pensarlo y luego de deliberarlo algunos minutos nuestros ojos se dirigieron hacia algo que capturo nuestra atención, allí estaba “Simfony”, mas no sabíamos a lo realmente a que nos enfrentábamos… tras unos cuantos días de postergar nuestro trabajo empezamos nuestra búsqueda de información y fue como deambulando en la Web encontramos lo que sería nuestro tutor a lo largo de este camino…. “Symfony 1.X La Guia Definitiva”[1], la cual es referenciada en muchos de los foros, escrita por Fabien Potencier y Francois Zaninotto el creado del Framework… quienes nos presentaron a Symfony con la siguiente definición… “Symfony es un completo framework diseñado para optimizar, el desarrollo de las aplicaciones web. Separa la lógica de negocio, la lógica de servidor y la presentación de la aplicación web. Proporciona varias herramientas y clases encaminadas a reducir el tiempo de desarrollo de una aplicación web compleja. Además, automatiza las tareas más comunes, permitiendo al desarrollador dedicarse por completo a los aspectos específicos de cada aplicación. El resultado de todas estas ventajas es que no se debe reinventar la rueda cada vez que se crea una nueva aplicación web.”… un corta definición para lo inmenso y funcional de este Framework… mientras mas leíamos nos dábamos cuenta de las grandes funcionalidades que este ofrecía a los desarrolladores para la construcción de aplicaciones Web, permitiéndole centrar su trabajo en la lógica del negocio, aplicando los mejores patrones de diseño y generando grandes partes del código como ayuda en la agilización de la construcción de código, de forma tal que desarrollador pueda contar con una excelente base para empezar el desarrollo de una aplicación Web.

Nuestra experiencia con Symfony…

Al principio cuando comenzamos a buscar información acerca del framework no nos animó mucho la idea de que todo debía hacerse mediante una consola de comandos, sin embargo el hecho de que este framework fuera totalmente gratuito hizo que nuestros intereses aumentaran un poco más, pues el aprender de una nueva herramienta nos daría una opción diferente en el futuro a la hora de construir un aplicación, empleándola sin la preocupación del costo de una licencia de una herramienta propietaria.
Fue reconfortante encontrar una excelente documentación, tiempo valioso que se han tomado los desarrolladores en generar la documentación de cada una de las versiones principales de Symfony la 1.0 y la 1.1.

Basándonos en la “Symfony 1.X La Guia Definitiva” fue que logramos realizar la instalación de Symfony en Mandriva 2008 haciendo uso de Pear que tal como lo dice el manual, es la manera más profesional de realizar dicha instalación… como toda herramienta lo importante es empezar y fue así que leyendo la parte referente a la instalación, nos dimos cuenta que lo que habíamos descargado y sobre lo que habíamos realizado algunas pruebas al principio no era más que un entorno de pruebas...
La instalación del framework la realizamos mediante los siguientes comandos:

#pear channel-discover pear.symfony-project.com
#pear install symfony/symfony

Superado el impase una vez instalado el framework, comenzamos a seguir los ejemplos de la guía en los cuales se generan proyectos, aplicaciones, se adicionan módulos etc.

En nuestro camino empezamos a descubrir la grandes funcionalidades de Symfony… y valla sorpresa la que nos llevamos cuando nos dimos cuenta de que Symfony obliga al desarrollador a usar por lo menos el patrón MVC, además de que en la guía hay una sección dedicada al uso de un sistema de control de versiones con el cual ya hemos trabajado y conocemos los beneficios que esto le da a un desarrollador; al final hasta el mismo manual implícitamente inculca al programador a aplicar buenas prácticas de programación.
Después de instalar Symfony nos hallamos con problemas ya que al crear una aplicación como la del entorno de pruebas, realizamos un despliegue de la página principal dándonos cuenta de que nos publicaba el mismo texto, pero ya no nos visualizaba la pagina con la hoja de estilo, después de tratar y tratar definitivamente no encontramos el error, nos faltaba experiencia así que terminamos por resignarnos y continuar nuestra guía.

Aparte de leer la guía definitiva, decidimos consultar en la página principal de Symfony www.symfony.es, quien nos brindo un tutorial de cómo construir un mini wiki en 20 minutos, desafortunadamente este estaba basado en Symfony 1.0 y algunos de los módulos de los cuales requería no eran compatibles con la versión 1.1 (Versión que habíamos actualizado unas horas antes) y como en el momento aun no se tenía la suficiente experiencia con el framework no logramos corregir estos errores, pues este tipo de aplicaciones mediante symfony son fáciles de desarrollar integrando al proyecto módulos que son generados por Symfony automáticamente.

Al final resolvimos hacer una aplicación de prueba tomando como referencia un tutorial que hacía uso de una base de datos y mediante el framework generaban el modulo que hace toda la gestión de los registros en dicha base de datos. Así que construimos con cuidado la especificación del archivo schema.yml en el cual se define la estructura de las tablas de la base de datos y dejamos que symfony se encargara de generar la aplicación con la que se gestiona esta información.

Para lo anterior el procedimiento fue el siguiente:
#mkdir miproyecto //Creamos un directorio
#cd miproyecto //Entramos al directorio
#symfony generate:project direcctorio //Generamos el proyecto
#symfony generate:app frontend //Creamos una aplicación
->En este punto definimos el archivo schema.yml asi:
///////////////////Archivo schema.yml////////////////
propel:
contacto:
_attributes: { phpName: Contacto }
id:
nombre: varchar(25)
apellido: varchar(25)
email: varchar(60)
celular: varchar(25)
telefono: varchar(25)
direccion: longvarchar

#symfony propel:build-model //Generamos las clases del //modelo que necesita el ORM

#symfony propel:build-sql //Generamos el archivo //lib.model.schema.sql para generar la base de datos

#mysql admin -u root -p create directorio //Creamos en mysql la //base de datos direcctorio
#mysql -u root direcctorio < data/sql/lib.model.schema.sql
//Creamos las tablas de la base de datos

#symfony configure:database "mysql://usuario:password@localhost/directorio"
//Configuramos el acceso de symfony a la base de datos

#symfony propel:init-admin frontend contacto Contacto
//hacemos que symfony agrege a frontend el modulo de //administracion de los contactos en la base de datos

Aunque la aplicación no corrió al principio por errores humanos fue fácil depurar los errores usando el modo de depuración que genera Symfony en cada proyecto.
Al final después de muchos contratiempos logramos hacer una aplicación Web que gestiona contactos en menos de 10 minutos…

Estos son algunas imágenes de nuestra aplicación…

Esta es la página a la cual se puede acceder una vez se ha creado un proyecto

Las siguientes imágenes son de la aplicación que genero symfony para la gestión de la base de datos de contactos que hicimos
Listar contactos

Adicionar contacto, que es la misma ventana de modificar contacto
Listar contactos con el nuevo contacto


Eliminar un contacto, la eliminación se hace desde editar contacto

Definitivamente el asombro de la potencia de este framework y sus servicios no acaba…pero es muy importante destacar que es un framework para construir aplicaciones realmente grandes que manejen complejas lógicas de negocio … como dijo el ing. Libardo Pantoja en una de sus clases… utilizar Symfony para una aplicación de 5 o 10 páginas diferentes y accesos sencillos a bases de datos es “como tener un helicóptero para ir a la universidad…” pues según la guía definitiva la única ventaja que se lograra para aplicaciones sencillas es “ utilizar objetos y el modelo MVC (Modelo Vista Controlador) que en últimas solo va a ralentizar el desarrollo del proyecto.”

Y por último ¿por que utilizar Symfony?

Symfony es una gran herramienta de desarrollo, es sencilla de usar pero lo suficientemente potente para adaptarse a casos muy complejos.
Symfony te enseña a construir aplicaciones con las mejores prácticas de diseño, y la aplicación de patrones para la Web.
Incentiva la buena documentación de código por medio de la herramienta phpDocumentor, la cual nos permite construir código legible aplicando buenas prácticas de programación.
Symfony nos provee de una validación automatizada de formularios y relleno automático de datos, lo que nos asegura la obtención de datos correctos de forma tal que nos evite trabajo en cuanto a seguridad de datos de refiere.
Etc.

Monica Acosta
Yeison Ceballos
Carlos Andrés Rodallega

Link Relacionados

[1]http://www.librosweb.es/symfony_1_1/pdf/symfony_1_1_guia_definitiva.pdf