symfony 1 2 guia definitiva

425
www.librosweb .es Symfony la guía definitiva Fabien Potencier, François Zaninotto

Upload: nestor-mendoza

Post on 10-Jul-2015

100 views

Category:

Documents


0 download

TRANSCRIPT

www.librosweb.es

Symfonyla gua definitiva

Fabien Potencier, Franois Zaninotto

Symfony 1.2, la gua definitiva

Sobre este libro... Los contenidos de este libro estn bajo una licencia Creative Commons Reconocimiento No Comercial - Sin Obra Derivada 3.0 (http://creativecommons.org/licenses/by-nc-nd/ 3.0/deed.es) Esta versin impresa se cre el 30 de diciembre de 2008 y todava est incompleta. La versin ms actualizada de los contenidos de este libro se puede encontrar en http://www.librosweb.es/symfony_1_2 Si quieres aportar sugerencias, comentarios, crticas o informar sobre errores, puedes enviarnos un mensaje a [email protected]

www.librosweb.es

2

Symfony 1.2, la gua definitiva Captulo 1. Introduccin a Symfony ............................................................................................................ 7 1.1. Symfony en pocas palabras ..................................................................................................................... 7 1.2. Conceptos bsicos ................................................................................................................................. 11 1.3. Resumen ................................................................................................................................................ 17 Captulo 2. Explorando el interior de Symfony...........................................................................................18 2.1. El patrn MVC........................................................................................................................................ 18 2.2. Organizacin del cdigo ........................................................................................................................ 29 2.3. Herramientas comunes ......................................................................................................................... 34 2.4. Resumen ................................................................................................................................................ 37 Captulo 3. Ejecutar aplicaciones Symfony .................................................................................................38 3.1. Instalando el entorno de pruebas ......................................................................................................... 38 3.2. Instalando las libreras de Symfony ....................................................................................................... 40 3.3. Crear una aplicacin web ...................................................................................................................... 42 3.4. Configurar el servidor web .................................................................................................................... 44 3.5. Resolucin de problemas ...................................................................................................................... 47 3.6. Versionado del cdigo fuente................................................................................................................ 48 3.7. Resumen ................................................................................................................................................ 50 Captulo 4. Introduccin a la creacin de pginas ......................................................................................51 4.1. Crear el esqueleto del mdulo .............................................................................................................. 51 4.2. Enlazando a otra accin......................................................................................................................... 56 4.3. Obteniendo informacin de la peticin................................................................................................. 58 4.4. Resumen ................................................................................................................................................ 59 Captulo 5. Configurar Symfony .................................................................................................................61 5.1. El sistema de configuracin ................................................................................................................... 61 5.2. Un vistazo general a los archivos de configuracin ............................................................................... 66 5.3. Entornos ................................................................................................................................................ 71 5.4. La cache de configuracin ..................................................................................................................... 75 5.5. Accediendo a la configuracin desde la aplicacin ............................................................................... 76 5.6. Trucos para los archivos de configuracin............................................................................................. 79 5.7. Resumen ................................................................................................................................................ 81 Captulo 6. El Controlador .........................................................................................................................82 6.1. El Controlador Frontal ........................................................................................................................... 82 6.2. Acciones................................................................................................................................................. 84 6.3. Accediendo a la peticin........................................................................................................................ 92 6.4. Sesiones de Usuario............................................................................................................................... 93 6.5. Seguridad de la Accin........................................................................................................................... 97 6.6. Mtodos de Validacin y Manejo de Errores ...................................................................................... 101 6.7. Filtros ................................................................................................................................................... 103 6.8. Configuracin del Mdulo ................................................................................................................... 109 6.9. Resumen .............................................................................................................................................. 109 Captulo 7. La Vista..................................................................................................................................111 7.1. Plantillas .............................................................................................................................................. 111 www.librosweb.es

3

Symfony 1.2, la gua definitiva 7.2. Fragmentos de cdigo ......................................................................................................................... 117 7.3. Configuracin de la vista ..................................................................................................................... 124 7.4. Slots de componentes ......................................................................................................................... 133 7.5. Mecanismo de escape ......................................................................................................................... 135 7.6. Resumen .............................................................................................................................................. 139 Captulo 8. El modelo ..............................................................................................................................140 8.1. Por qu utilizar un ORM y una capa de abstraccin? ........................................................................ 140 8.2. Esquema de base de datos de Symfony .............................................................................................. 142 8.3. Las clases del modelo .......................................................................................................................... 144 8.4. Acceso a los datos................................................................................................................................ 146 8.5. Conexiones con la base de datos......................................................................................................... 154 8.6. Extender el modelo ............................................................................................................................. 156 8.7. Sintaxis extendida del esquema .......................................................................................................... 159 8.8. No crees el modelo dos veces ............................................................................................................. 165 8.9. Resumen .............................................................................................................................................. 167 Captulo 9. Enlaces y sistema de enrutamiento........................................................................................169 9.1. Qu es el enrutamiento? ................................................................................................................... 169 9.2. Reescritura de URL .............................................................................................................................. 173 9.3. Helpers de enlaces............................................................................................................................... 175 9.4. Configuracin del sistema de enrutamiento ....................................................................................... 180 9.5. Trabajando con rutas en las acciones.................................................................................................. 187 9.6. Resumen .............................................................................................................................................. 188 Captulo 10. Formularios .........................................................................................................................189 10.1. Helpers de formularios ...................................................................................................................... 189 10.2. Helpers de formularios para objetos ................................................................................................. 197 10.3. Validacin de formularios.................................................................................................................. 201 10.4. Validaciones complejas ..................................................................................................................... 213 10.5. Resumen ............................................................................................................................................ 217 Captulo 11. Integracin con Ajax ............................................................................................................218 11.1. Helpers bsicos de JavaScript ............................................................................................................ 218 11.2. Prototype........................................................................................................................................... 221 11.3. Helpers de Ajax.................................................................................................................................. 223 11.4. Parmetros para la ejecucin remota ............................................................................................... 228 11.5. Creando efectos visuales ................................................................................................................... 232 11.6. JSON................................................................................................................................................... 233 11.7. Interacciones complejas con Ajax...................................................................................................... 235 11.8. Resumen ............................................................................................................................................ 240 Captulo 12. Uso de la cache ....................................................................................................................241 12.1. Guardando la respuesta en la cache.................................................................................................. 241 12.2. Eliminando elementos de la cache .................................................................................................... 250 12.3. Probando y monitorizando la cache .................................................................................................. 254 12.4. HTTP 1.1 y la cache del lado del cliente............................................................................................. 256 www.librosweb.es

4

Symfony 1.2, la gua definitiva 12.5. Resumen ............................................................................................................................................ 259 Captulo 13. Internacionalizacin y localizacin .......................................................................................260 13.1. Cultura del usuario ............................................................................................................................ 260 13.2. Estndares y formatos ....................................................................................................................... 263 13.3. Informacin textual en la base de datos ........................................................................................... 265 13.4. Traduccin de la interfaz ................................................................................................................... 267 13.5. Resumen ............................................................................................................................................ 273 Captulo 14. Generador de la parte de administracin .............................................................................274 14.1. Generacin de cdigo en funcin del modelo................................................................................... 274 14.2. Creando la parte de administracin de las aplicaciones ................................................................... 275 14.3. Configuracin del generador ............................................................................................................. 280 14.4. Modificando el aspecto de los mdulos generados .......................................................................... 299 14.5. Resumen ............................................................................................................................................ 303 Captulo 15. Pruebas unitarias y funcionales ...........................................................................................304 15.1. Automatizacin de pruebas............................................................................................................... 304 15.2. Pruebas unitarias ............................................................................................................................... 307 15.3. Pruebas funcionales........................................................................................................................... 315 15.4. Recomendaciones sobre el nombre de las pruebas .......................................................................... 324 15.5. Otras utilidades para pruebas ........................................................................................................... 325 15.6. Resumen ............................................................................................................................................ 330 Captulo 16. Herramientas para la administracin de aplicaciones ..........................................................331 16.1. Logs.................................................................................................................................................... 331 16.2. Depuracin de aplicaciones............................................................................................................... 335 16.3. Utilizando Symfony fuera de la web .................................................................................................. 344 16.4. Cargando datos en una base de datos............................................................................................... 347 16.5. Instalando aplicaciones ..................................................................................................................... 350 16.6. Resumen ............................................................................................................................................ 355 Captulo 17. Personalizar Symfony ..........................................................................................................356 17.1. Eventos .............................................................................................................................................. 356 17.2. Factoras ............................................................................................................................................ 364 17.3. Integrando componentes de otros frameworks................................................................................ 367 17.4. Plugins ............................................................................................................................................... 369 17.5. Resumen ............................................................................................................................................ 385 Captulo 18. Rendimiento........................................................................................................................387 18.1. Optimizando el servidor .................................................................................................................... 387 18.2. Optimizando el modelo ..................................................................................................................... 388 18.3. Optimizando la vista .......................................................................................................................... 396 18.4. Optimizando la cache ........................................................................................................................ 398 18.5. Desactivando las caractersticas que no se utilizan ........................................................................... 403 18.6. Optimizando el cdigo fuente ........................................................................................................... 404 18.7. Resumen ............................................................................................................................................ 406 Captulo 19. Configuracin avanzada.......................................................................................................407 www.librosweb.es

5

Symfony 1.2, la gua definitiva 19.1. Opciones de Symfony ........................................................................................................................ 407 19.2. Extendiendo la carga automtica de clases....................................................................................... 415 19.3. Estructura de archivos propia............................................................................................................ 418 19.4. Comprendiendo el funcionamiento de los manejadores de configuracin ...................................... 421 19.5. Resumen ............................................................................................................................................ 425

www.librosweb.es

6

Symfony 1.2, la gua definitiva

Captulo 1. Introduccin a Symfony

Captulo 1. Introduccin a SymfonyQu puedes hacer con Symfony? Qu necesitas para utilizarlo? Este captulo responde a todas estas preguntas.

1.1. Symfony en pocas palabrasUn framework simplifica el desarrollo de una aplicacin mediante la automatizacin de algunos de los patrones utilizados para resolver las tareas comunes. Adems, un framework proporciona estructura al cdigo fuente, forzando al desarrollador a crear cdigo ms legible y ms fcil de mantener. Por ltimo, un framework facilita la programacin de aplicaciones, ya que encapsula operaciones complejas en instrucciones sencillas. Symfony es un completo framework diseado para optimizar, gracias a sus caractersticas, el desarrollo de las aplicaciones web. Para empezar, separa la lgica de negocio, la lgica de servidor y la presentacin de la aplicacin web. Proporciona varias herramientas y clases encaminadas a reducir el tiempo de desarrollo de una aplicacin web compleja. Adems, automatiza las tareas ms comunes, permitiendo al desarrollador dedicarse por completo a los aspectos especficos de cada aplicacin. El resultado de todas estas ventajas es que no se debe reinventar la rueda cada vez que se crea una nueva aplicacin web. Symfony est desarrollado completamente con PHP 5. Ha sido probado en numerosos proyectos reales y se utiliza en sitios web de comercio electrnico de primer nivel. Symfony es compatible con la mayora de gestores de bases de datos, como MySQL, PostgreSQL, Oracle y SQL Server de Microsoft. Se puede ejecutar tanto en plataformas *nix (Unix, Linux, etc.) como en plataformas Windows. A continuacin se muestran algunas de sus caractersticas.

1.1.1. Caractersticas de SymfonySymfony se dise para que se ajustara a los siguientes requisitos: Fcil de instalar y configurar en la mayora de plataformas (y con la garanta de que funciona correctamente en los sistemas Windows y *nix estndares) Independiente del sistema gestor de bases de datos Sencillo de usar en la mayora de casos, pero lo suficientemente flexible como para adaptarse a los casos ms complejos Basado en la premisa de "convenir en vez de configurar", en la que el desarrollador solo debe configurar aquello que no es convencional Sigue la mayora de mejores prcticas y patrones de diseo para la web Preparado para aplicaciones empresariales y adaptable a las polticas y arquitecturas propias de cada empresa, adems de ser lo suficientemente estable como para desarrollar aplicaciones a largo plazo

www.librosweb.es

7

Symfony 1.2, la gua definitiva

Captulo 1. Introduccin a Symfony

Cdigo fcil de leer que incluye comentarios de phpDocumentor y que permite un mantenimiento muy sencillo Fcil de extender, lo que permite su integracin con libreras desarrolladas por terceros

1.1.1.1. Automatizacin de caractersticas de proyectos webSymfony automatiza la mayora de elementos comunes de los proyectos web, como por ejemplo: La capa de internacionalizacin que incluye Symfony permite la traduccin de los datos y de la interfaz, as como la adaptacin local de los contenidos. La capa de presentacin utiliza plantillas y layouts que pueden ser creados por diseadores HTML sin ningn tipo de conocimiento del framework. Los helpers incluidos permiten minimizar el cdigo utilizado en la presentacin, ya que encapsulan grandes bloques de cdigo en llamadas simples a funciones. Los formularios incluyen validacin automatizada y relleno automtico de datos ("repopulation"), lo que asegura la obtencin de datos correctos y mejora la experiencia de usuario. Los datos incluyen mecanismos de escape que permiten una mejor proteccin contra los ataques producidos por datos corruptos. La gestin de la cach reduce el ancho de banda utilizado y la carga del servidor. La autenticacin y la gestin de credenciales simplifican la creacin de secciones restringidas y la gestin de la seguridad de usuario. El sistema de enrutamiento y las URL limpias permiten considerar a las direcciones de las pginas como parte de la interfaz, adems de estar optimizadas para los buscadores. El soporte de e-mail incluido y la gestin de APIs permiten a las aplicaciones web interactuar ms all de los navegadores. Los listados son ms fciles de utilizar debido a la paginacin automatizada, el filtrado y la ordenacin de datos. Los plugins, las factoras (patrn de diseo "Factory") y los "mixin" permiten realizar extensiones a medida de Symfony. Las interacciones con Ajax son muy fciles de implementar mediante los helpers que permiten encapsular los efectos JavaScript compatibles con todos los navegadores en una nica lnea de cdigo.

1.1.1.2. Entorno de desarrollo y herramientasSymfony puede ser completamente personalizado para cumplir con los requisitos de las empresas que disponen de sus propias polticas y reglas para la gestin de proyectos y la programacin de aplicaciones. Por defecto incorpora varios entornos de desarrollo diferentes e incluye varias herramientas que permiten automatizar las tareas ms comunes de la ingeniera del software:

www.librosweb.es

8

Symfony 1.2, la gua definitiva

Captulo 1. Introduccin a Symfony

Las herramientas que generan automticamente cdigo han sido diseadas para hacer prototipos de aplicaciones y para crear fcilmente la parte de gestin de las aplicaciones. El framework de desarrollo de pruebas unitarias y funcionales proporciona las herramientas ideales para el desarrollo basado en pruebas ("test-driven development"). La barra de depuracin web simplifica la depuracin de las aplicaciones, ya que muestra toda la informacin que los programadores necesitan sobre la pgina en la que estn trabajando. La interfaz de lnea de comandos automatiza la instalacin de las aplicaciones entre servidores. Es posible realizar cambios "en caliente" de la configuracin (sin necesidad de reiniciar el servidor). El completo sistema de log permite a los administradores acceder hasta el ltimo detalle de las actividades que realiza la aplicacin.

1.1.2. Quin ha desarrollado Symfony y por qu motivo?La primera versin de Symfony fue publicada en Octubre de 2005 por Fabien Potencier, fundador del proyecto y coautor de este libro. Fabien es el presidente de Sensio (http://www.sensio.com/), una empresa francesa de desarrollo de aplicaciones web conocida por sus innovaciones en este campo. En el ao 2003, Fabien realiz una investigacin sobre las herramientas de software libre disponibles para el desarrollo de aplicaciones web con PHP. Fabien lleg a la conclusin de que no exista ninguna herramienta con esas caractersticas. Despus del lanzamiento de la versin 5 de PHP, decidi que las herramientas disponibles haban alcanzado un grado de madurez suficiente como para integrarlas en un framework completo. Fabien emple un ao entero para desarrollar el ncleo de Symfony, basando su trabajo en el framework Mojavi (que tambin era un framework que segua el funcionamiento MVC), en la herramienta Propel para el mapeo de objetos a bases de datos (conocido como ORM, de "object-relational mapping") y en los helpers empleados por Ruby on Rails en sus plantillas. Fabien desarroll originalmente Symfony para utilizarlo en los proyectos de Sensio, ya que disponer de un framework efectivo es la mejor ayuda para el desarrollo eficiente y rpido de las aplicaciones. Adems, el desarrollo web se hace ms intuitivo y las aplicaciones resultantes son ms robustas y ms fciles de mantener. El framework se utiliz por primera vez en el desarrollo de un sitio de comercio electrnico para un vendedor de lencera y posteriormente se utiliz en otros proyectos. Despus de utilizar Symfony en algunos proyectos, Fabien decidi publicarlo bajo una licencia de software libre. Sus razones para liberar el proyecto fueron para donar su trabajo a la comunidad, aprovechar la respuesta de los usuarios, mostrar la experiencia de Sensio y porque considera que es divertido hacerlo. Nota Por qu lo llamaron "Symfony" y no "CualquierNombreFramework"? Porque Fabien quera una nombre corto que tuviera una letra 's' (de Sensio) y una letra 'f' (de framework), que fuerawww.librosweb.es

9

Symfony 1.2, la gua definitiva

Captulo 1. Introduccin a Symfony

fcil de recordar y que no estuviera asociado a otra herramienta de desarrollo. Adems, no le gustan las maysculas. "Symfony" era muy parecido a lo que estaba buscando, aunque no es una palabra correcta en el idioma ingls (la palabra correcta es "symphony"), y adems estaba libre como nombre de proyecto. La otra alternativa era "baguette". Para que Symfony fuera un proyecto de software libre exitoso, deba tener una documentacin amplia y en ingls, para aumentar la incorporacin de usuarios al proyecto. Fabien pidi a su compaero de trabajo Franois Zaninotto, el otro coautor de este libro, que investigara el cdigo fuente del programa y escribiera un libro sobre Symfony. Aunque el proceso fue arduo, cuando el proyecto se lanz pblicamente, la documentacin era suficiente como para atraer a muchos desarrolladores. El resto es historia.

1.1.3. La comunidad SymfonyEn cuanto se abri al pblico el sitio web de Symfony (http://www.symfony-project.org/) muchos desarrolladores de todo el mundo se descargaron e instalaron el framework, comenzaron a leer la documentacin y construyeron sus primeras aplicaciones con Symfony, aumentando poco a poco la popularidad de Symfony. En ese momento, los frameworks para el desarrollo de aplicaciones web estaban en pleno apogeo, y era muy necesario disponer de un completo framework realizado con PHP. Symfony proporcionaba una solucin irresistible a esa carencia, debido a la calidad de su cdigo fuente y a la gran cantidad de documentacin disponible, dos ventajas muy importantes sobre otros frameworks disponibles. Los colaboradores aparecieron en seguida proponiendo parches y mejoras, detectando los errores de la documentacin y realizando otras tareas muy importantes. El repositorio pblico de cdigo fuente y el sistema de notificacin de errores y mejoras mediante tickets permite varias formas de contribuir al proyecto y todos los voluntarios son bienvenidos. Fabien continua siendo el mayor contribuidor de cdigo al repositorio y se encarga de garantizar la calidad del cdigo. Actualmente, el foro de Symfony, las listas de correo y el IRC ofrecen otras alternativas vlidas para el soporte del framework, con el que cada pregunta suele obtener una media de 4 respuestas. Cada da nuevos usuarios instalan Symfony y el wiki y la seccin de fragmentos de cdigo almacenan una gran cantidad de documentacin generada por los usuarios. Cada semana el nmero de aplicaciones conocidas desarrolladas con Symfony se incrementa en 5 y el aumento continua. La comunidad Symfony es el tercer pilar del framework y esperamos que tu tambin te unas a ella despus de leer este libro.

1.1.4. Es adecuado Symfony para m?Independientemente de que seas un experto programador de PHP 5 o un principiante en el desarrollo de aplicaciones web, podrs utilizar Symfony de forma sencilla. El principal argumento para decidir si deberas o no utilizar Symfony es el tamao del proyecto. Si tu proyecto consiste en desarrollar un sitio web sencillo con 5 o 10 pginas diferentes, acceso simple a bases de datos y no es importante asegurar un gran rendimiento o una documentacinwww.librosweb.es

10

Symfony 1.2, la gua definitiva

Captulo 1. Introduccin a Symfony

adecuada, deberas realizar tu proyecto solo con PHP. En ese caso, no vas a obtener grandes ventajas por utilizar un framework de desarrollo de aplicaciones web, adems de que utilizar objetos y el modelo MVC (Modelo Vista Controlador) solamente va a ralentizar el desarrollo de tu proyecto. Adems, Symfony no est optimizado para ejecutarse de forma eficiente en un servidor compartido en el que los scripts de PHP se ejecutan solamente mediante CGI (Common Gateway Interface). Por otra parte, si desarrollas aplicaciones web complejas con mucha lgica de negocio, no es recomendable utilizar solo PHP. Para asegurar el mantenimiento y las ampliaciones futuras de la aplicacin, es necesario que el cdigo sea ligero, legible y efectivo. Si quieres incorporar los ltimos avances en interaccin con usuarios (como por ejemplo Ajax), puedes acabar escribiendo cientos de lneas de JavaScript. Si quieres desarrollar aplicaciones de forma divertida y muy rpida, no es aconsejable utilizar solo PHP. En todos estos casos, deberas utilizar Symfony. Si eres un desarrollador web profesional, ya conoces todas las ventajas de utilizar un framework de desarrollo de aplicaciones web y solo necesitas un framework que sea maduro, bien documentado y con una gran comunidad que lo apoye. En este caso, deberas dejar de buscar porque Symfony es lo que necesitas. Sugerencia Si quieres ver una demostracin visual de las posibilidades de Symfony, deberas ver los vdeos o screencasts que estn disponibles en el sitio web de Symfony. En estas demostraciones se ve lo rpido y divertido que es desarrollar aplicaciones web con Symfony.

1.2. Conceptos bsicosAntes de empezar con Symfony, deberas conocer algunos conceptos bsicos. Puedes saltarte esta seccin si conoces el significado de OOP, ORM, RAD, DRY, KISS, TDD, YAML y PEAR.

1.2.1. PHP 5Symfony est programado en PHP 5 (http://www.php.net/) y est enfocado al desarrollo de aplicaciones web en el mismo lenguaje de programacin. Por este motivo, es obligatorio disponer de unos conocimientos avanzados de PHP 5 para sacar el mximo partido al framework. La versin mnima de PHP requerida para ejecutar Symfony es PHP 5.2. Los programadores que conocen PHP 4 pero que no han trabajado con PHP 5 deberan centrarse en el nuevo modelo orientado a objetos de PHP.

1.2.2. Programacin Orientada a Objetos (OOP)La programacin orientada a objetos (OOP, por sus siglas en ingls Object-oriented programming) no va a ser explicada en este captulo, ya que se necesitara un libro entero para ello. Como Symfony hace un uso continuo de los mecanismos orientados a objetos disponibles en PHP 5, es un requisito obligatorio el conocer la OOP antes de aprender Symfony. En la Wikipedia se explica la OOP de la siguiente manera:

www.librosweb.es

11

Symfony 1.2, la gua definitiva

Captulo 1. Introduccin a Symfony

La idea de la programacin orientada a objetos es que una aplicacin se puede considerar como una coleccin de unidades individuales, llamadas objetos, que interactan entre s. Los programas tradicionales pueden considerarse como una coleccin de funciones o como una lista de instrucciones de programacin. PHP 5 incluye los conceptos de clase, objeto, mtodo, herencia y muchos otros propios de la programacin orientada a objetos. Aquellos que no estn familiarizados con estos conceptos, deberan consultar la documentacin oficial de PHP disponible en http://www.php.net/manual/ es/language.oop5.basic.php.

1.2.3. Mtodos mgicosUno de los puntos fuertes de los objetos de PHP es la utilizacin de los "mtodos mgicos". Este tipo de mtodos permiten redefinir el comportamiento de las clases sin modificar el cdigo externo. Con estos mtodos es posible que la sintaxis de PHP sea ms concisa y ms fcil de extender. Adems, estos mtodos son fciles de reconocer ya que sus nombres siempre empiezan con 2 guiones bajos seguidos (__). Por ejemplo, al mostrar un objeto, PHP busca de forma implcita un mtodo llamado __toString() en ese objeto y que permite comprobar si se ha creado una visualizacin personalizada para ese objeto:$miObjeto = new miClase(); echo $miObjeto; // Se busca el mtodo mgico echo $miObjeto->__toString();

Symfony utiliza los mtodos mgicos de PHP, por lo que deberas conocer su funcionamiento. La documentacin oficial de PHP tambin explica los mtodos mgicos (http://www.php.net/ manual/es/language.oop5.magic.php)

1.2.4. PEAR (PHP Extension and Application Repository)PEAR es un "framework y sistema de distribucin para componentes PHP reutilizables". PEAR permite descargar, instalar, actualizar y desinstalar scripts de PHP. Si se utiliza un paquete de PEAR, no es necesario decidir donde guardar los scripts, cmo hacer que se puedan utilizar o cmo extender la lnea de comandos (CLI). PEAR es un proyecto creado por la comunidad de usuarios de PHP, est desarrollado con PHP y se incluye en las distribuciones estndar de PHP. Sugerencia El sitio web de PEAR, http://pear.php.net/, incluye documentacin y muchos paquetes agrupados en categoras. PEAR es el mtodo ms profesional para instalar libreras externas en PHP. Symfony aconseja el uso de PEAR para disponer de una instalacin nica y centralizada que pueda ser utilizada en varios proyectos. Los plugins de Symfony son paquetes de PEAR con una configuracin especial. El propio framework Symfony tambin est disponible como paquete de PEAR.

www.librosweb.es

12

Symfony 1.2, la gua definitiva

Captulo 1. Introduccin a Symfony

Afortunadamente, no es necesario conocer la sintaxis de PEAR para utilizar Symfony. Lo nico necesario es entender su funcionamiento y tenerlo instalado. Para comprobar si PEAR est instalado en el sistema, se puede escribir lo siguiente en una lnea de comandos:> pear info pear

El comando anterior muestra la versin de PEAR instalada en el sistema. El proyecto Symfony dispone de su propio repositorio PEAR, tambin llamado canal. Los canales de PEAR solamente se pueden utilizar a partir de la versin 1.4.0, por lo que es necesario actualizar PEAR si se dispone de una versin anterior. Para actualizar PEAR, se debe ejecutar el siguiente comando:> pear upgrade PEAR

1.2.5. Mapeo de Objetos a Bases de datos (ORM)Las bases de datos siguen una estructura relacional. PHP 5 y Symfony por el contrario son orientados a objetos. Por este motivo, para acceder a la base de datos como si fuera orientada a objetos, es necesario una interfaz que traduzca la lgica de los objetos a la lgica relacional. Esta interfaz se denomina "mapeo de objetos a bases de datos" (ORM, de sus siglas en ingls "object-relational mapping"). Un ORM consiste en una serie de objetos que permiten acceder a los datos y que contienen en su interior cierta lgica de negocio. Una de las ventajas de utilizar estas capas de abstraccin de objetos/relacional es que evita utilizar una sintaxis especfica de un sistema de bases de datos concreto. Esta capa transforma automticamente las llamadas a los objetos en consultas SQL optimizadas para el sistema gestor de bases de datos que se est utilizando en cada momento. De esta forma, es muy sencillo cambiar a otro sistema de bases de datos completamente diferente en mitad del desarrollo de un proyecto. Estas tcnicas son tiles por ejemplo cuando se debe desarrollar un prototipo rpido de una aplicacin y el cliente aun no ha decidido el sistema de bases de datos que ms le conviene. El prototipo se puede realizar utilizando SQLite y despus se puede cambiar fcilmente a MySQL, PostgreSQL u Oracle cuando el cliente se haya decidido. El cambio se puede realizar modificando solamente una lnea en un archivo de configuracin. La capa de abstraccin utilizada encapsula toda la lgica de los datos. El resto de la aplicacin no tiene que preocuparse por las consultas SQL y el cdigo SQL que se encarga del acceso a la base de datos es fcil de encontrar. Los desarrolladores especializados en la programacin con bases de datos pueden localizar fcilmente el cdigo. Utilizar objetos en vez de registros y clases en vez de tablas tiene otra ventaja: se pueden definir nuevos mtodos de acceso a las tablas. Por ejemplo, si se dispone de una tabla llamada Cliente con 2 campos, Nombre y Apellido, puede que sea necesario acceder directamente al nombre completo (NombreCompleto). Con la programacin orientada a objetos, este problema se resuelve aadiendo un nuevo mtodo de acceso a la clase Cliente de la siguiente forma:

www.librosweb.es

13

Symfony 1.2, la gua definitivapublic function getNombreCompleto() { return $this->getNombre().' '.$this->getApellido(); }

Captulo 1. Introduccin a Symfony

Todas las funciones comunes de acceso a los datos y toda la lgica de negocio relacionada con los datos se puede mantener dentro de ese tipo de objetos. Por ejemplo, la siguiente clase CarritoCompra almacena los productos (que son objetos). Para obtener el precio total de los productos del carrito y as realizar el pago, se puede aadir un mtodo llamado getTotal() de la siguiente forma:public function getTotal() { $total = 0; foreach ($this->getProductos() as $producto) { $total += $producto->getPrecio() * $item->getCantidad(); } return $total; }

Y eso es todo. Imagina cuanto te hubiera costado escribir una consulta SQL que hiciera lo mismo. Propel, que tambin es un proyecto de software libre, es una de las mejores capas de abstraccin de objetos/relacional disponibles en PHP 5. Propel est completamente integrado en Symfony e incluso es su ORM por defecto, por lo que la mayora de las manipulaciones de datos realizadas en este libro siguen la sintaxis de Propel. En el libro se describe la utilizacin de los objetos de Propel, pero se puede encontrar una referencia ms completa en el sitio web de Propel (http://propel.phpdb.org/trac/). Nota A partir de Symfony 1.1, Propel se incluye en el framework en forma de plugin, lo que facilita el cambio a otro ORM. De hecho, si quieres utilizar Doctrine (http://www.phpdoctrine.org/) como ORM en tus proyectos, slo tienes que instalar el plugin sfDoctrinePlugin.

1.2.6. Desarrollo rpido de aplicaciones (RAD)Durante mucho tiempo, la programacin de aplicaciones web fue un tarea tediosa y muy lenta. Siguiendo los ciclos habituales de la ingeniera del software (como los propuestos por el Proceso Racional Unificado o Rational Unified Process) el desarrollo de una aplicacin web no puede comenzar hasta que se han establecido por escrito una serie de requisitos, se han creado los diagramas UML (Unified Modeling Language) y se ha producido abundante documentacin sobre el proyecto. Este modelo se vea favorecido por la baja velocidad de desarrollo, la falta de versatilidad de los lenguajes de programacin (antes de ejecutar el programa se debe construir, compilar y reiniciar) y sobre todo por el hecho de que los clientes no estaban dispuestos a adaptarse a otras metodologas. Hoy en da, las empresas reaccionan ms rpidamente y los clientes cambian de opinin constantemente durante el desarrollo de los proyectos. De este modo, los equipos de desarrollo deben adaptarse a esas necesidades y tienen que poder cambiar la estructura de una aplicacinwww.librosweb.es

14

Symfony 1.2, la gua definitiva

Captulo 1. Introduccin a Symfony

de forma rpida. Afortunadamente, el uso de lenguajes de script como Perl y PHP permiten seguir otras estrategias de programacin, como RAD (desarrollo rpido de aplicaciones) y el desarrollo gil de software. Una de las ideas centrales de esta metodologa es que el desarrollo empieza lo antes posible para que el cliente pueda revisar un prototipo que funciona y pueda indicar el camino a seguir. A partir de ah, la aplicacin se desarrolla de forma iterativa, en la que cada nueva versin incorpora nuevas funcionalidades y se desarrolla en un breve espacio de tiempo. Las consecuencias de estas metodologas para el desarrollador son numerosas. El programador no debe pensar acerca de las versiones futuras al incluir una nueva funcionalidad. Los mtodos utilizados deben ser lo ms sencillos y directos posibles. Estas ideas se resumen en el principio denominado KISS: Hazlo sencillo, idiota! (Keep It Simple, Stupid) Cuando se modifican los requisitos o cuando se aade una nueva funcionalidad, normalmente se debe reescribir parte del cdigo existente. Este proceso se llama refactorizacin y sucede a menudo durante el desarrollo de una aplicacin web. El cdigo suele moverse a otros lugares en funcin de su naturaleza. Los bloques de cdigo repetidos se refactorizan en un nico lugar, aplicando el principio DRY: No te repitas (Don't Repeat Yourself). Para asegurar que la aplicacin sigue funcionando correctamente a pesar de los cambios constantes, se necesita una serie de pruebas unitarias que puedan ser automatizadas. Si estn bien escritas, las pruebas unitarias permiten asegurar que nada ha dejado de funcionar despus de haber refactorizado parte del cdigo de la aplicacin. Algunas metodologas de desarrollo de aplicaciones obligan a escribir las pruebas antes que el propio cdigo, lo que se conoce como TDD: desarrollo basado en pruebas (test-driven development). Nota Existen otros principios y hbitos relacionados con el desarrollo gil de aplicaciones. Una de las metodologas ms efectivas se conoce como XP: programacin extrema (Extreme Programming). La documentacin relacionada con XP puede ensearte mucho sobre el desarrollo rpido y efectivo de las aplicaciones. Una buena forma de empezar con XP son los libros escritos por Kent Beck en la editorial Addison-Wesley. Symfony es la herramienta ideal para el RAD. De hecho, el framework ha sido desarrollado por una empresa que aplica el RAD a sus propios proyectos. Por este motivo, aprender a utilizar Symfony no es como aprender un nuevo lenguaje de programacin, sino que consite en aprender a tomar las decisiones correctas para desarrollar las aplicaciones de forma ms efectiva.

1.2.7. YAMLSegn el sitio web oficial de YAML (http://www.yaml.org/), YAML es "un formato para serializar datos que es fcil de procesar por las mquinas, fcil de leer para las personas y fcil de interactuar con los lenguajes de script". Dicho de otra forma, YAML es un lenguaje muy sencillo que permite describir los datos como en XML, pero con una sintaxis mucho ms sencilla. YAML es un formato especialmente til para describir datos que pueden ser transformados en arrays simples y asociativos, como por ejemplo:$casa = array( 'familia' => array(

www.librosweb.es

15

Symfony 1.2, la gua definitiva'apellido' => 'Garca', 'padres' => array('Antonio', 'Mara'), 'hijos' => array('Jose', 'Manuel', 'Carmen') ), 'direccion' => array( 'numero' => 34, 'calle' => 'Gran Va', 'ciudad' => 'Cualquiera', 'codigopostal' => '12345' ) );

Captulo 1. Introduccin a Symfony

Este array de PHP se puede crear directamente procesando esta cadena de texto en formato YAML:casa: familia: apellido: Garca padres: - Antonio - Mara hijos: - Jose - Manuel - Carmen direccion: numero: 34 calle: Gran Va ciudad: Cualquiera codigopostal: "12345"

YAML utiliza la tabulacin para indicar su estructura, los elementos que forman una secuencia utilizan un guin medio y los pares clave/valor de los array asociativos se separan con dos puntos. YAML tambin dispone de una notacin resumida para describir la misma estructura con menos lneas: los arrays simples se definen con [] y los arrays asociativos se definen con {}. Por tanto, los datos YAML anteriores se pueden escribir de forma abreviada de la siguiente manera:casa: familia: { apellido: Garca, padres: [Antonio, Mara], hijos: [Jose, Manuel, Carmen] } direccion: { numero: 34, direccion: Gran Va, ciudad: Cualquiera, codigopostal: "12345" }

YAML es el acrnimo de "YAML Ain't Markup Language" ("YAML No es un Lenguaje de Marcado") y se pronuncia "yamel". El formato se lleva utilizando desde 2001 y existen utilidades para procesar YAML en una gran variedad de lenguajes de programacin. Sugerencia La especificacin completa del formato YAML se puede encontrar en http://www.yaml.org/. Como se ha visto, YAML es mucho ms rpido de escribir que XML (ya que no hacen falta las etiquetas de cierre y el uso continuo de las comillas) y es mucho ms poderoso que los tradicionales archivos .ini (ya que estos ltimos no soportan la herencia y las estructuras complejas). Por este motivo, Symfony utiliza el formato YAML como el lenguaje preferido parawww.librosweb.es

16

Symfony 1.2, la gua definitiva

Captulo 1. Introduccin a Symfony

almacenar su configuracin. Este libro contiene muchos archivos YAML, pero como es tan sencillo, probablemente no necesites aprender ms detalles de este formato.

1.3. ResumenSymfony es un framework para desarrollar aplicaciones web creado con PHP 5. Aade una nueva capa por encima de PHP y proporciona herramientas que simplifican el desarrollo de las aplicaciones web complejas. Este libro contiene todos los detalles del funcionamiento de Symfony y para entenderlo, solamente es necesario estar familiarizado con los conceptos bsicos de la programacin moderna, sobre todo la programacin orientada a objetos (OOP), el mapeo de objetos a bases de datos (ORM) y el desarrollo rpido de aplicaciones (RAD). El nico requisito tcnico obligatorio es el conocimiento de PHP 5.

www.librosweb.es

17

Symfony 1.2, la gua definitiva

Captulo 2. Explorando el interior de Symfony

Captulo 2. Explorando el interior de SymfonyLa primera vez que se accede al cdigo fuente de una aplicacin realizada con Symfony, puede desanimar un poco a los nuevos desarrolladores. El cdigo est dividido en muchos directorios y muchos scripts y los archivos son un conjunto de clases PHP, cdigo HTML e incluso una mezcla de los dos. Adems, existen referencias a clases que no se pueden encontrar dentro del directorio del proyecto y la anidacin de directorios puede llegar hasta los seis niveles. Sin embargo, cuando comprendas las razones que estn detrs de esta aparente complejidad, lo vers como algo completamente natural y no querrs cambiar la estructura de una aplicacin Symfony por ninguna otra. En este captulo se explica con detalle toda esa estructura.

2.1. El patrn MVCSymfony est basado en un patrn clsico del diseo web conocido como arquitectura MVC, que est formado por tres niveles: El Modelo representa la informacin con la que trabaja la aplicacin, es decir, su lgica de negocio. La Vista transforma el modelo en una pgina web que permite al usuario interactuar con ella. El Controlador se encarga de procesar las interacciones del usuario y realiza los cambios apropiados en el modelo o en la vista. La Figura 2-1 ilustra el funcionamiento del patrn MVC. La arquitectura MVC separa la lgica de negocio (el modelo) y la presentacin (la vista) por lo que se consigue un mantenimiento ms sencillo de las aplicaciones. Si por ejemplo una misma aplicacin debe ejecutarse tanto en un navegador estndar como un un navegador de un dispositivo mvil, solamente es necesario crear una vista nueva para cada dispositivo; manteniendo el controlador y el modelo original. El controlador se encarga de aislar al modelo y a la vista de los detalles del protocolo utilizado para las peticiones (HTTP, consola de comandos, email, etc.). El modelo se encarga de la abstraccin de la lgica relacionada con los datos, haciendo que la vista y las acciones sean independientes de, por ejemplo, el tipo de gestor de bases de datos utilizado por la aplicacin.

www.librosweb.es

18

Symfony 1.2, la gua definitiva

Captulo 2. Explorando el interior de Symfony

Figura 2.1. El patrn MVC

2.1.1. Las capas de la arquitectura MVCPara poder entender las ventajas de utilizar el patrn MVC, se va a transformar una aplicacin simple realizada con PHP en una aplicacin que sigue la arquitectura MVC. Un buen ejemplo para ilustrar esta explicacin es el de mostrar una lista con las ltimas entradas o artculos de un blog.

2.1.1.1. Programacin simpleUtilizando solamente PHP normal y corriente, el script necesario para mostrar los artculos almacenados en una base de datos se muestra en el siguiente listado: Listado 2-1 - Un script simple Listado de Artculos Listado de Artculos FechaTitulo

El script anterior es fcil de escribir y rpido de ejecutar, pero muy difcil de mantener y actualizar. Los principales problemas del cdigo anterior son: No existe proteccin frente a errores (qu ocurre si falla la conexin con la base de datos?). El cdigo HTML y el cdigo PHP estn mezclados en el mismo archivo e incluso en algunas partes estn entrelazados. El cdigo solo funciona si la base de datos es MySQL.

2.1.1.2. Separando la presentacinLas llamadas a echo y printf del listado 2-1 dificultan la lectura del cdigo. De hecho, modificar el cdigo HTML del script anterior para mejorar la presentacin es un folln debido a cmo est programado. As que el cdigo va a ser dividido en dos partes. En primer lugar, el cdigo PHP puro con toda la lgica de negocio se incluye en el script del controlador, como se muestra en el listado 2-2. Listado 2-2 - La parte del controlador, en index.php

Una buena regla general para determinar si la parte de la vista est suficientemente limpia de cdigo es que debera contener una cantidad mnima de cdigo PHP, la suficiente como para que un diseador HTML sin conocimientos de PHP pueda entenderla. Las instrucciones ms comunes en la parte de la vista suelen ser echo, if/endif, foreach/endforeach y poco ms. Adems, no se deben incluir instrucciones PHP que generen etiquetas HTML. Toda la lgica se ha centralizado en el script del controlador, que solamente contiene cdigo PHP y ningn tipo de HTML. De hecho, y como puedes imaginar, el mismo controlador se puede reutilizar para otros tipos de presentaciones completamente diferentes, como por ejemplo un archivo PDF o una estructura de tipo XML.

2.1.1.3. Separando la manipulacin de los datosLa mayor parte del script del controlador se encarga de la manipulacin de los datos. Pero, qu ocurre si se necesita la lista de entradas del blog para otro controlador, por ejemplo uno que se dedica a generar el canal RSS de las entradas del blog? Y si se quieren centralizar todas las consultas a la base de datos en un nico sitio para evitar duplicidades? Qu ocurre si cambia el modelo de datos y la tabla articulo pasa a llamarse articulo_blog? Y si se quiere cambiar a PostgreSQL en vez de MySQL? Para poder hacer todo esto, es imprescindible eliminar del controlador todo el cdigo que se encarga de la manipulacin de los datos y ponerlo en otro script, llamado el modelo, tal y como se muestra en el listado 2-4.www.librosweb.es

21

Symfony 1.2, la gua definitiva

Captulo 2. Explorando el interior de Symfony

Listado 2-4 - La parte del modelo, en modelo.php

www.librosweb.es

24

Symfony 1.2, la gua definitiva

Captulo 2. Explorando el interior de Symfony

Listado 2-9 - La parte de la lgica de la vista

2.1.2.3. Acciones y controlador frontalEn el ejemplo anterior, el controlador no se encargaba de realizar muchas tareas, pero en las aplicaciones web reales el controlador suele tener mucho trabajo. Una parte importante de su trabajo es comn a todos los controladores de la aplicacin. Entre las tareas comunes se encuentran el manejo de las peticiones del usuario, el manejo de la seguridad, cargar la configuracin de la aplicacin y otras tareas similares. Por este motivo, el controlador normalmente se divide en un controlador frontal, que es nico para cada aplicacin, y las acciones, que incluyen el cdigo especfico del controlador de cada pgina. Una de las principales ventajas de utilizar un controlador frontal es que ofrece un punto de entrada nico para toda la aplicacin. As, en caso de que sea necesario impedir el acceso a la aplicacin, solamente es necesario editar el script correspondiente al controlador frontal. Si la aplicacin no dispone de controlador frontal, se debera modificar cada uno de los controladores.

2.1.2.4. Orientacin a objetosLos ejemplos anteriores utilizan la programacin procedimental. Las posibilidades que ofrecen los lenguajes de programacin modernos para trabajar con objetos permiten simplificar la programacin, ya que los objetos pueden encapsular la lgica, pueden heredar mtodos y atributos entre diferentes objetos y proporcionan una serie de convenciones claras sobre la forma de nombrar a los objetos. La implementacin de una arquitectura MVC en un lenguaje de programacin que no est orientado a objetos puede encontrarse con problemas de namespaces y cdigo duplicado, dificultando la lectura del cdigo de la aplicacin. La orientacin a objetos permite a los desarrolladores trabajar con objetos de la vista, objetos del controlador y clases del modelo, transformando las funciones de los ejemplos anteriores en mtodos. Se trata de un requisito obligatorio para las arquitecturas de tipo MVC. Sugerencia Si quieres profundizar en el tema de los patrones de diseo para las aplicaciones web en el contexto de la orientacin a objetos, puedes leer "Patterns of Enterprise Applicationwww.librosweb.es

25

Symfony 1.2, la gua definitiva

Captulo 2. Explorando el interior de Symfony

Architecture" de Martin Fowler (Addison-Wesley, ISBN: 0-32112-742-0). El cdigo de ejemplo del libro de Fowler est escrito en Java y en C#, pero es bastante fcil de leer para los programadores de PHP.

2.1.3. La implementacin del MVC que realiza SymfonyPiensa por un momento cuntos componentes se necesitaran para realizar una pgina sencilla que muestre un listado de las entradas o artculos de un blog. Como se muestra en la figura 2-2, son necesarios los siguientes componentes: La capa del Modelo Abstraccin de la base de datos Acceso a los datos La capa de la Vista Vista Plantilla Layout La capa del Controlador Controlador frontal Accin En total son siete scripts, lo que parecen muchos archivos para abrir y modificar cada vez que se crea una pgina. Afortunadamente, Symfony simplifica este proceso. Symfony toma lo mejor de la arquitectura MVC y la implementa de forma que el desarrollo de aplicaciones sea rpido y sencillo. En primer lugar, el controlador frontal y el layout son comunes para todas las acciones de la aplicacin. Se pueden tener varios controladores y varios layouts, pero solamente es obligatorio tener uno de cada. El controlador frontal es un componente que slo tiene cdigo relativo al MVC, por lo que no es necesario crear uno, ya que Symfony lo genera de forma automtica. La otra buena noticia es que las clases de la capa del modelo tambin se generan automticamente, en funcin de la estructura de datos de la aplicacin. La librera Propel se encarga de esta generacin automtica, ya que crea el esqueleto o estructura bsica de las clases y genera automticamente el cdigo necesario. Cuando Propel encuentra restricciones de claves forneas (o externas) o cuando encuentra datos de tipo fecha, crea mtodos especiales para acceder y modificar esos datos, por lo que la manipulacin de datos se convierte en un juego de nios. La abstraccin de la base de datos es completamente transparente para el programador, ya que se realiza de forma nativa mediante PDO (PHP Data Objects). As, si se cambia el sistema gestor de bases de datos en cualquier momento, no se debe reescribir ni una lnea de cdigo, ya que tan slo es necesario modificar un parmetro en un archivo de configuracin. Por ltimo, la lgica de la vista se puede transformar en un archivo de configuracin sencillo, sin necesidad de programarla.www.librosweb.es

26

Symfony 1.2, la gua definitiva

Captulo 2. Explorando el interior de Symfony

Figura 2.2. El flujo de trabajo de Symfony Considerando todo lo anterior, el ejemplo de la pgina que muestra un listado con todas las entradas del blog solamente requiere de tres archivos en Symfony, que se muestran en los listados 2-11, 2-12 y 2-13. Listado 2-11 - Accin listado, en miproyecto/apps/miaplicacion/modules/weblog/actions/actions.class.php Listado de Artculos

www.librosweb.es

27

Symfony 1.2, la gua definitivaFechaTtulo

Captulo 2. Explorando el interior de Symfony

Adems es necesario crear un layout como el del listado 2-13. Afortunadamente, el mismo layout se puede reutilizar muchas veces. Listado 2-13 - Layout, en miproyecto/apps/miaplicacion/templates/layout.php

Estos scripts son todo lo que necesita la aplicacin del ejemplo. El cdigo mostrado es el necesario para crear la misma pgina que generaba el script simple del listado 2-1. Symfony se encarga del resto de tareas, como hacer que los componentes interactuen entre s. Si se considera el nmero de lneas de cdigo, el listado de entradas de blog creado segn la arquitectura MVC no requiere ms lneas ni ms tiempo de programacin que un script simple. Sin embargo, la arquitectura MVC proporciona grandes ventajas, como la organizacin del cdigo, la reutilizacin, la flexibilidad y una programacin mucho ms entretenida. Por si fuera poco, crear la aplicacin con Symfony permite crear pginas XHTML vlidas, depurar fcilmente las aplicaciones, crear una configuracin sencilla, abstraccin de la base de datos utilizada, enrutamiento con URL limpias, varios entornos de desarrollo y muchas otras utilidades para el desarrollo de aplicaciones.

2.1.4. Las clases que forman el ncleo de SymfonyLa implementacin que realiza Symfony de la arquitectura MVC incluye varias clases que se mencionan una y otra vez a lo largo del libro: sfController es la clase del controlador. Se encarga de decodificar la peticin y transferirla a la accin correspondiente. sfRequest almacena todos los elementos que forman la peticin (parmetros, cookies, cabeceras, etc.) sfResponse contiene las cabeceras de la respuesta y los contenidos. El contenido de este objeto se transforma en la respuesta HTML que se enva al usuario. El contexto (que se obtiene mediante sfContext::getInstance()) almacena una referencia a todos los objetos que forman el ncleo de Symfony y puede ser accedido desde cualquier punto de la aplicacin.www.librosweb.es

28

Symfony 1.2, la gua definitiva

Captulo 2. Explorando el interior de Symfony

El captulo 6 explica en detalle todos estos objetos. Como se ha visto, todas las clases de Symfony utilizan el prefijo sf, como tambin hacen todas las variables principales de Symfony en las plantillas. De esta forma, se evitan las colisiones en los nombres de clases y variables de Symfony y los nombres de tus propias clases y variables, adems de que las clases del framework son ms fciles de reconocer. Nota Entre las normas seguidas por el cdigo de Symfony, se encuentra el estndar "UpperCamelCase" para el nombre de las clases y variables. Solamente existen dos excepciones: las clases del ncleo de Symfony empiezan por sf (por tanto en minsculas) y las variables utilizadas en las plantillas que utilizan la sintaxis de separar las palabras con guiones bajos. Nota del traductor La notacin "CamelCase" consiste en escribir frases o palabras compuestas eliminando los espacios intermedios y poniendo en mayscula la primera letra de cada palabra. La variante "UpperCamelCase" tambin pone en mayscula la primera letra de todas.

2.2. Organizacin del cdigoAhora que ya conoces los componentes que forman una aplicacin de Symfony, a lo mejor te ests preguntando sobre cmo estn organizados. Symfony organiza el cdigo fuente en una estructura de tipo proyecto y almacena los archivos del proyecto en una estructura estandarizada de tipo rbol.

2.2.1. Estructura del proyecto: Aplicaciones, Mdulos y AccionesSymfony considera un proyecto como "un conjunto de servicios y operaciones disponibles bajo un determinado nombre de dominio y que comparten el mismo modelo de objetos". Dentro de un proyecto, las operaciones se agrupan de forma lgica en aplicaciones. Normalmente, una aplicacin se ejecuta de forma independiente respecto de otras aplicaciones del mismo proyecto. Lo habitual es que un proyecto contenga dos aplicaciones: una para la parte pblica y otra para la parte de gestin, compartiendo ambas la misma base de datos. Tambin es posible definir proyectos que estn formados por varios sitios web pequeos, cada uno de ellos considerado como una aplicacin. En este caso, es importante tener en cuenta que los enlaces entre aplicaciones se deben indicar de forma absoluta. Cada aplicacin est formada por uno o ms mdulos. Un mdulo normalmente representa a una pgina web o a un grupo de pginas con un propsito relacionado. Por ejemplo, una aplicacin podra tener mdulos como home, articulos, ayuda, carritoCompra, cuenta, etc. Los mdulos almacenan las acciones, que representan cada una de las operaciones que se puede realizar en un mdulo. Por ejemplo el mdulo carritoCompra puede definir acciones como anadir, mostrar y actualizar. Normalmente las acciones se describen mediante verbos. Trabajar con acciones es muy similar a trabajar con las pginas de una aplicacin web tradicional, aunque en este caso dos acciones diferentes pueden acabar mostrando la misma pgina (como por ejemplo la accin de aadir un comentario a una entrada de un blog, que acaba volviendo a mostrar la pgina de la entrada con el nuevo comentario).

www.librosweb.es

29

Symfony 1.2, la gua definitiva

Captulo 2. Explorando el interior de Symfony

Nota Nota del traductor En el prrafo anterior, la accin del carrito se llama anadir y no aadir, ya que el nombre de una accin tambin se utiliza como parte del nombre de un fichero y como parte del nombre de una funcin, por lo que se recomienda utilizar exclusivamente caracteres ASCII, y por tanto, no debera utilizarse la letra . Sugerencia Si crees que todo esto es demasiado complicado para tu primer proyecto con Symfony, puedes agrupar todas las acciones en un nico mdulo, para simplificar la estructura de archivos. Cuando la aplicacin se complique, puedes reorganizar las acciones en diferentes mdulos. Como se comenta en el captulo 1, la accin de reescribir el cdigo para mejorar su estructura o hacerlo ms sencillo (manteniendo siempre su comportamiento original) se llama refactorizacin, y es algo muy comn cuando se aplican los principios del RAD ("desarrollo rpido de aplicaciones"). La figura 2-3 muestra un ejemplo de organizacin del cdigo para un proyecto de un blog, siguiendo la estructura de proyecto / aplicacin / mdulo / accin. No obstante, la estructura de directorios real del proyecto es diferente al esquema mostrado por esa figura.

Figura 2.3. Ejemplo de organizacin del cdigo

2.2.2. Estructura del rbol de archivosNormalmente, todos los proyectos web comparten el mismo tipo de contenidos, como por ejemplo: Una base de datos, como MySQL o PostgreSQL Archivo estticos (HTML, imgenes, archivos de JavaScript, hojas de estilos, etc.) Archivos subidos al sitio web por parte de los usuarios o los administradores Clases y libreras PHP Libreras externas (scripts desarrollados por terceros) Archivos que se ejecutan por lotes (batch files) que normalmente son scripts que se ejecutan va lnea de comandos o mediante cron Archivos de log (las trazas que generan las aplicaciones y/o el servidor) Archivos de configuracinwww.librosweb.es

30

Symfony 1.2, la gua definitiva

Captulo 2. Explorando el interior de Symfony

Symfony proporciona una estructura en forma de rbol de archivos para organizar de forma lgica todos esos contenidos, adems de ser consistente con la arquitectura MVC utilizada y con la agrupacin proyecto / aplicacin / mdulo. Cada vez que se crea un nuevo proyecto, aplicacin o mdulo, se genera de forma automtica la parte correspondiente de esa estructura. Adems, la estructura se puede personalizar completamente, para reorganizar los archivos y directorios o para cumplir con las exigencias de organizacin de un cliente.

2.2.2.1. Estructura de la raz del proyectoLa raz de cualquier proyecto Symfony contiene los siguientes directorios:apps/ frontend/ backend/ cache/ config/ data/ sql/ doc/ lib/ model/ log/ plugins/ test/ bootstrap/ unit/ functional/ web/ css/ images/ js/ uploads/

La tabla 2-1 describe los contenidos de estos directorios Tabla 2-1. Directorios en la raz de los proyectos SymfonyDirectorio Descripcin apps/ Contiene un directorio por cada aplicacin del proyecto (normalmente, frontend y backend para la parte pblica y la parte de gestin respectivamente) Contiene la versin cacheada de la configuracin y (si est activada) la versin cacheada de las acciones y plantillas del proyecto. El mecanismo de cache (que se explica en el Captulo 12) utiliza los archivos de este directorio para acelerar la respuesta a las peticiones web. Cada aplicacin contiene un subdirectorio que guarda todos los archivos PHP y HTML preprocesados Almacena la configuracin general del proyecto En este directorio se almacenan los archivos relacionados con los datos, como por ejemplo el esquema de una base de datos, el archivo que contiene las instrucciones SQL para crear las tablas e incluso un archivo de bases de datos de SQLite Contiene la documentacin del proyecto, formada por tus propios documentos y por la documentacin generada por PHPdoc

cache/

config/ data/

doc/

www.librosweb.es

31

Symfony 1.2, la gua definitiva

Captulo 2. Explorando el interior de Symfony

lib/

Almacena las clases y libreras externas. Se suele guardar todo el cdigo comn a todas las aplicaciones del proyecto. El subdirectorio model/ guarda el modelo de objetos del proyecto (como se describe en el Captulo 8) Guarda todos los archivos de log generados por Symfony. Tambin se puede utilizar para guardar los logs del servidor web, de la base de datos o de cualquier otro componente del proyecto. Symfony crea un archivo de log por cada aplicacin y por cada entorno (los archivos de log se ven detalladamente en el Captulo 16)

log/

plugins/ Almacena los plugins instalados en la aplicacin (el Captulo 17 aborda el tema de los plugins) test/ Contiene las pruebas unitarias y funcionales escritas en PHP y compatibles con el framework de pruebas de Symfony (que se explica en el captulo 15). Cuando se crea un proyecto, Symfony crea algunos pruebas bsicas La raz del servidor web. Los nicos archivos accesibles desde Internet son los que se encuentran en este directorio

web/

2.2.2.2. Estructura de cada aplicacinTodas las aplicaciones de Symfony tienen la misma estructura de archivos y directorios:apps/ [nombre aplicacion]/ config/ i18n/ lib/ modules/ templates/ layout.php

La tabla 2-2 describe los subdirectorios de una aplicacin Tabla 2-2. Subdirectorios de cada aplicacin SymfonyDirectorio Descripcin Contiene un montn de archivos de configuracin creados con YAML. Aqu se almacena la mayor parte de la configuracin de la aplicacin, salvo los parmetros propios del framework. Tambin es posible redefinir en este directorio los parmetros por defecto si es necesario. El Captulo 5 contiene ms detalles sobre la configuracin de las aplicaciones Contiene todos los archivos utilizados para la internacionalizacin de la aplicacin, sobre todo los archivos que traducen la interfaz (el Captulo 13 detalla la internacionalizacin). La internacionalizacin tambin se puede realizar con una base de datos, en cuyo caso este directorio no se utilizara Contiene las clases y libreras utilizadas exclusivamente por la aplicacin Almacena los mdulos que definen las caractersticas de la aplicacin

config/

i18n/

lib/ modules/

Contiene las plantillas globales de la aplicacin, es decir, las que utilizan todos los mdulos. templates/ Por defecto contiene un archivo llamado layout.php, que es el layout principal con el que se muestran las plantillas de los mdulos

Nota En las aplicaciones recin creadas, los directorios i18n/, lib/ y modules/ estn vacos.

www.librosweb.es

32

Symfony 1.2, la gua definitiva

Captulo 2. Explorando el interior de Symfony

Las clases de una aplicacin no pueden acceder a los mtodos o atributos de otras aplicaciones del mismo proyecto. Adems, los enlaces entre 2 aplicaciones de un mismo proyecto se deben indicar de forma absoluta. Esta ltima restriccin es importante durante la inicializacin del proyecto, que es cuando debes elegir como dividir el proyecto en aplicaciones.

2.2.2.3. Estructura de cada mduloCada aplicacin contiene uno o ms mdulos. Cada mdulo tiene su propio subdirectorio dentro del directorio modules y el nombre del directorio es el que se elige durante la creacin del mdulo. Esta es la estructura de directorios tpica de un mdulo:apps/ [nombre aplicacion]/ modules/ [nombre modulo]/ actions/ actions.class.php config/ lib/ templates/ indexSuccess.php

La tabla 2-3 describe los subirectorios de un mdulo. Tabla 2-3. Subdirectorios de cada mduloDirectorio actions/ config/ lib/ templates/ Descripcin Normalmente contiene un nico archivo llamado actions.class.php y que corresponde a la clase que almacena todas las acciones del mdulo. Tambin es posible crear un archivo diferente para cada accin del mdulo Puede contener archivos de configuracin adicionales con parmetros exclusivos del mdulo Almacena las clases y libreras utilizadas exclusivamente por el mdulo Contiene las plantillas correspondientes a las acciones del mdulo. Cuando se crea un nuevo mdulo, automticamente se crea la plantilla llamada indexSuccess.php

Nota En los mdulos recin creados, los directorios config/ y lib/ estn vacos.

2.2.2.4. Estructura del sitio webExisten pocas restricciones sobre la estructura del directorio web, que es el directorio que contiene los archivos que se pueden acceder de forma pblica. Si se utilizan algunas convenciones bsicas en los nombres de los subdirectorios, se pueden simplificar las plantillas. La siguiente es una estructura tpica del directorio web:web/ css/ images/ js/ uploads/

www.librosweb.es

33

Symfony 1.2, la gua definitiva

Captulo 2. Explorando el interior de Symfony

Normalmente, los archivos estticos se organizan segn los directorios de la tabla 2-4. Tabla 2-4. Subdirectorios habituales en la carpeta webDirectorio Descripcin css/ images/ js/ Contiene los archivos de hojas de estilo creados con CSS (archivos con extensin .css Contiene las imgenes del sitio con formato .jpg, .png o .gif Contiene los archivos de JavaScript con extensin .js

Se pueden almacenar los archivos subidos por los usuarios. Aunque normalmente este directorio contiene imgenes, no se debe confundir con el directorio que almacena las imgenes del sitio uploads/ (images/). Esta distincin permite sincronizar los servidores de desarrollo y de produccin sin afectar a las imgenes subidas por los usuarios

Nota Aunque es muy recomendable mantener la estructura definida por defecto, es posible modificarla para adaptarse a las necesidades especficas de cada proyecto, como por ejemplo los proyectos que se ejecutan en servidores con sus propias estructuras de directorios definidas y con otras polticas para el desarrollo de las aplicaciones. El Captulo 19 explica en detalle cmo modificar la estructura de directorios definida por Symfony.

2.3. Herramientas comunesAlgunas tcnicas se utilizan una y otra vez en Symfony, por lo que es fcil encontrarse con ellas a lo largo de este libro y en el desarrollo de tus proyectos. Entre estas tcnicas se encuentran los contenedores de parmetros (parameter holders), las constantes y la carga automtica de clases.

2.3.1. Contenedores de parmetrosMuchas de las clases de Symfony contienen algn contenedor de parmetros. Se trata de una forma eficiente de encapsular los atributos y as poder utilizar mtodos getter y setter sencillos. La clase sfRequest por ejemplo incluye un contenedor de parmetros que se puede obtener mediante el mtodo getParameterHolder(). Todos los contenedores de parmetros almacenan sus datos de la misma forma, como se muestra en el listado 2-14. Listado 2-14 - Uso del contenedor de parmetros de sfRequest$peticion->getParameterHolder()->set('parametro', 'valor'); echo $peticion->getParameterHolder()->get('parametro'); => 'valor'

La mayora de clases que contienen contenedores de parmetros proporcionan mtodos abreviados para las operaciones de tipo get/set. La clase sfRequest es una de esas clases, ya que el cdigo abreviado del listado 2-15 obtiene el mismo resultado que el cdigo original del listado 2-14. Listado 2-15 - Uso de los mtodos abreviados del contenedor de parmetros desfResponse

www.librosweb.es

34

Symfony 1.2, la gua definitiva$peticion->setParameter('parametro', 'valor'); echo $peticion->getParameter('parametro'); => 'valor'

Captulo 2. Explorando el interior de Symfony

El mtodo getter del contenedor de parmetros permite la definicin de un segundo parmetro que actua de valor por defecto. De esta manera, se obtiene una proteccin efectiva y sencilla frente a los errores. El listado 2-16 contiene un ejemplo de su uso. Listado 2-16 - Uso de valores por defecto en las funciones de tipo getter// El parmetro llamado 'parametro' no est definido, por lo que el getter devuelve un valor vaco echo $peticion->getParameter('parametro'); => null // El valor por defecto se puede obtener con sentencias condicionales if ($peticion->hasParameter('parametro')) { echo $peticion->getParameter('parametro'); } else { echo 'valor_por_defecto'; } => 'valor_por_defecto' // El siguiente mtodo es mucho ms rpido echo $peticion->getParameter('parametro', 'valor_por_defecto'); => 'valor_por_defecto'

Algunas clases del ncleo de Symfony utilizan un contenedor de parmetros que permite el uso de namespaces (gracias a la clase sfNamespacedParameterHolder). Si se utiliza un tercer parmetro en un getter o en un setter, ese parmetro se utiliza como namespace del parmetro y por tanto, el parmetro slo estar definido dentro de ese namespace. El listado 2-17 muestra un ejemplo. Listado 2-17 - Uso de un namespace en el contenedor de parmetros de sfUser$usuario->setAttribute('parametro', 'valor1'); $usuario->setAttribute('parametro', 'valor2', 'mi/namespace'); echo $usuario->getAttribute('parametro'); => 'valor1' echo $usuario->getAttribute('parametro', null, 'mi/namespace'); => 'valor2'

Tambin es posible aadir contenedores de parmetros a tus propias clases, para aprovechar las ventajas de su sintaxis. El listado 2-18 muestra un ejemplo de cmo definir una clase con un contenedor de parmetros. Listado 2-18 - Aadir un contenedor de parmetros a una claseclass MiClase { protected $contenedorParametros = null;

www.librosweb.es

35

Symfony 1.2, la gua definitiva

Captulo 2. Explorando el interior de Symfony

public function initialize($parametros = array()) { $this->contenedorParametros = new sfParameterHolder(); $this->contenedorParametros->add($parametros); } public function getContenedorParametros() { return $this->contenedorParametros; } }

2.3.2. ConstantesAunque pueda parecer sorprendente, el cdigo de Symfony no incluye ninguna constante. La razn es que las constantes de PHP tienen un inconveniente: no se puede modificar su valor una vez definidas. Por este motivo, Symfony utiliza su propio objeto para almacenar la configuracin, llamado sfConfig, y que reemplaza a las constantes. Este objeto proporciona mtodos estticos para poder acceder a los parmetros desde cualquier punto de la aplicacin. El listado 2-19 muestra el uso de los mtodos de la clase sfConfig. Listado 2-19 - Uso de los mtodos de la clase sfConfig en vez de constantes// En vez de constantes de PHP... define('MI_CONSTANTE', 'valor'); echo MI_CONSTANTE; // ...Symfony utiliza el objeto sfConfig sfConfig::set('mi_constante', 'valor'); echo sfConfig::get('mi_constante');

Los mtodos de sfConfig permiten definir valores por defecto y se puede invocar el mtodo sfConfig::set() ms de una vez sobre el mismo parmetro para modificar su valor. El captulo 5 detalla el uso de los mtodos de sfConfig.

2.3.3. Carga automtica de clasesNormalmente, cuando se utiliza un mtodo de una clase o cuando se crea un objeto en PHP, se debe incluir antes la definicin de esa clase.include 'clases/MiClase.php'; $miObjeto = new MiClase();

Sin embargo, en los proyectos complejos con muchas clases y una estructura de directorios con muchos niveles, requiere mucho trabajo incluir todas las clases necesarias indicando correctamente la ruta de cada clase. Symfony incluye una funcin spl_autoload_register() para evitar la necesidad de los include y as poder escribir directamente:$miObjeto = new MiClase();

www.librosweb.es

36

Symfony 1.2, la gua definitiva

Captulo 2. Explorando el interior de Symfony

En este caso, Symfony busca la definicin de la clase MiClase en todos los archivos con extensin .php que se encuentran en alguno de los directorios lib/ del proyecto. Si se encuentra la definicin de la clase, se incluye de forma automtica. De esta forma, si se guardan todas las clases en los directorios lib/, no es necesario incluir las clases de forma explcita. Por este motivo, los proyectos de Symfony no suelen incluir instrucciones de tipo include o require. Nota Para mejorar el rendimiento, la carga automtica de clases de Symfony busca durante la primera peticin en una serie de directorios (que se definen en un archivo interno de configuracin). Una vez realizada la bsqueda en los directorios, se guarda el nombre de todas las clases encontradas y su ruta de acceso en un array asociativo de PHP. As, las siguientes peticiones no tienen que volver a mirar todos los directorios en busca de las clases. Este comportamiento implica que se debe borrar la cache de Symfony cada vez que se aade o se mueve una clase del proyecto (salvo en el entorno de desarrollo, donde no es necesario). El comando utilizado para borrar la cache es symfony cache:clear, salvo en el entorno de desarrollo, donde Symfony borra automticamente la cach una vez cuando no encuentra una clase. El Captulo 12 explica con detalle el mecanismo de cache y la configuracin de la carga automtica de clases se muestra en el captulo 19.

2.4. ResumenEl uso de un framework que utiliza MVC obliga a dividir y organizar el cdigo de acuerdo a las convenciones establecidas por el framework. El cdigo de la presentacin se guarda en la vista, el cdigo de manipulacin de datos se guarda en el modelo y la lgica de procesamiento de las peticiones constituye el controlador. Aplicar el patrn MVC a una aplicacin resulta bastante til adems de restrictivo. Symfony es un framework de tipo MVC escrito en PHP 5. Su estructura interna se ha diseado para obtener lo mejor del patrn MVC y la mayor facilidad de uso. Gracias a su versatilidad y sus posibilidades de configuracin, Symfony es un framework adecuado para cualquier proyecto de aplicacin web. Ahora que ya has aprendido la teora que est detrs de Symfony, estas casi preparado para desarrollar tu primera aplicacin. Pero antes de eso, necesitas tener instalado Symfony en tu servidor de desarrollo.

www.librosweb.es

37

Symfony 1.2, la gua definitiva

Captulo 3. Ejecutar aplicaciones Symfony

Captulo 3. Ejecutar aplicaciones SymfonyComo se ha visto en los captulos anteriores, el framework Symfony est formado por un conjunto de archivos escritos en PHP. Los proyectos realizados con Symfony utilizan estos archivos, por lo que la instalacin de Symfony consiste en obtener esos archivos y hacer que estn disponibles para los proyectos. La versin mnima de PHP requerida para ejecutar Symfony 1.2 es PHP 5.2. Por tanto, es necesario asegurarse de que se encuentra instalado, para lo cual se puede ejecutar el siguiente comando en la lnea de comandos del sistema operativo:> php -v PHP 5.2.5 (cli) (built: Nov 20 2007 16:55:40) Copyright (c) 1997-2007 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies

Si el nmero de la versin que se muestra es 5.2 o superior, ya es posible realizar la instalacin de Symfony que se describe en este captulo.

3.1. Instalando el entorno de pruebasSi lo nico que quieres es comprobar lo que puede dar de s Symfony, lo mejor es que te decantes por la instalacin rpida. En este caso, se utiliza el "entorno de pruebas" o sandbox. El entorno de pruebas est formado por un conjunto de archivos. Contiene un proyecto vaco de Symfony e incluye todas las libreras necesarias (Symfony, lime, Prototype con Scriptaculous, Doctrine y Propel con Phing), una aplicacin de prueba y la configuracin bsica. No es necesario realizar ninguna configuracin en el servidor ni instalar ningn paquete adicional para que funcione correctamente. Para instalar el entorno de pruebas, se debe descargar su archivo comprimido desde http://www.symfony-project.org/get/sf_sandbox_1_2.tgz. Una vez descargado el archivo, es esencial asegurarse que tiene la extensin .tgz, ya que de otro modo no se descomprimir correctamente. La extensin .tgz no es muy comn en sistemas operativos tipo Windows, pero programas como WinRAR o 7-Zip lo pueden descomprimir sin problemas. A continuacin, se descomprime su contenido en el directorio raz del servidor web, que normalmente es web/ o www/. Para asegurar cierta uniformidad en la documentacin, en este captulo se supone que se ha descomprimido el entorno de pruebas en el directorio sf_sandbox/. Cuidado Para hacer pruebas en un servidor local, se pueden colocar todos los archivos en la raz del servidor web. Sin embargo, se trata de una mala prctica para los servidores de produccin, ya que los usuarios pueden ver el funcionamiento interno de la aplicacin. Se puede comprobar si se ha realizado correctamente la instalacin del entorno de pruebas mediante los comandos proporcionados por Symfony. Entra en el directorio sf_sandbox/ y ejecuta el siguiente comando:www.librosweb.es

38

Symfony 1.2, la gua definitiva> php symfony -V

Captulo 3. Ejecutar aplicaciones Symfony

El resultado del comando debera mostrar la versin del entorno de pruebas:symfony version 1.2.0 (/ruta/hasta/el/directorio/lib/dir/utilizado/por/el/entorno/de/ pruebas)

A continuacin, se prueba si el servidor web puede acceder al entorno de pruebas mediante la siguiente URL:http://localhost/sf_sandbox/web/frontend_dev.php/

Si todo ha ido bien, deberas ver una pgina de bienvenida como la que se muestra en la figura 3-1, con lo que la instalacin rpida se puede dar por concluida. Si no se muestra esa pgina, se mostrar un mensaje de error que te indica los cambios necesarios en la configuracin. Tambin puedes consultar la seccin "Resolucin de problemas" que se encuentra ms adelante en este captulo.

Figura 3.1. Pgina de bienvenida del entorno de pruebaswww.librosweb.es

39

Symfony 1.2, la gua definitiva

Captulo 3. Ejecutar aplicaciones Symfony

El entorno de pruebas est pensado para que practiques con Symfony en un servidor local, no para desarrollar aplicaciones complejas que acaban siendo publicadas en la web. No obstante, la versin de Symfony que est incluida en el entorno de pruebas es completamente funcional y equivalente a la que se instala va PEAR. Para desinstalar el entorno de pruebas, borra el directorio sf_sandbox/ de la carpeta web/ de tu servidor.

3.2. Instalando las libreras de SymfonyAl desarrollar aplicaciones con Symfony, es probable que tengas que instalarlo dos veces: una para el entorno de desarrollo y otra para el servidor de produccin (a no ser que el servicio de hosting que utilices tenga Symfony preinstalado). En cada uno de los servidores lo lgico es evitar duplicidades juntando todos los archivos de Symfony en un nico directorio, independientemente de que desarrolles una o varias aplicaciones. Como el desarrollo de Symfony evoluciona rpidamente, es posible que est disponible una nueva versin estable del framework unos das despus de la primera instalacin. La actualizacin del framework es algo a tener muy en cuenta, por lo que se trata de otra razn de peso para juntar en un nico directorio todas las libreras de Symfony. Existen dos alternativas para instalar las libreras necesarias para el desarrollo de las aplicaciones: La instalacin que utiliza PEAR es la recomendada para la mayora de usuarios. Con este mtodo, la instalacin es bastante sencilla, adems de ser fcil de compartir y de actualizar. La instalacin que utiliza Subversion (SVN) solamente se recomienda para los programadores de PHP ms avanzados y es el mtodo con el que pueden obtener los ltimos parches, pueden aadir sus propias caractersticas al framework y pueden colaborar con el proyecto Symfony. Symfony integra algunos paquetes externos: lime es una utilidad para las pruebas unitarias. Propel se utiliza para el ORM. Proporciona persistencia para los objetos y un servicio de consultas. Phing es una utilidad que emplea Propel para generar las clases del modelo. Lime ha sido desarrollado por el equipo de Symfony. Propel y Phing han sido creados por otros equipos de desarrollo y se publican bajo la licencia GNU Lesser Public General License (LGPL). Todos estos paquetes estn incluidos en Symfony. Sugerencia El framework Symfony dispone de una licencia de tipo MIT. Todos los avisos de copyright del software externo que incluye Symfony se encuentran en el archivo COPYRIGHT y todas sus licencias se encuentran en el directorio licenses/

www.librosweb.es

40

Symfony 1.2, la gua definitiva

Captulo 3. Ejecutar aplicaciones Symfony

3.2.1. Instalando Symfony con PEAREl paquete PEAR de Symfony incluye las libreras propias de Symfony y todas sus dependencias. Adems, tambin contiene un script que permite extender la lnea de comandos del sistema para que funcione el comando symfony. Para instalar Symfony de est