Symfony PHP Framework
Symfony PHP Framework
Frameworks PHP:
Desarrollo web rápido ARTURO FERNÁNDEZ
[email protected]
ada vez resulta más necesa- más extendido para el desarrollo de aplica-
Propel como ORM (Object-Relational $ sudo apt-get install rectamente el código fuente a través del
Mapping), el cual se encarga de establecer php5-symfony control de versiones Subversion. La instala-
la correspondencia entre objetos y tablas, ción usando PEAR es bastante sencilla,
permitiendo el acceso a las mismas y libe- Debemos ser prudentes, pues por basta con ejecutar los siguientes coman-
rando al programador de la tediosa tarea de ejemplo, Ubuntu incluye la versión 1.0 y la úl- dos:
escribir todas las sentencias SQL. Symfony tima estable es la 1.2. Para el resto de distri-
también nos permite utilizar Doctrine en lu- buciones seguiremos un método alternati- $ pear channel-discover
gar de Propel, siendo en este caso PDO, vo. Para facilitar la instalación, Symfony dis- pear.symfony-project.com
que forma parte de PHP5, la capa de abs- tribuye un fichero tarball que contiene las li- $ pear remote-list -c symfony
tracción a base de datos. Si nunca hemos brerías básicas y la configuración necesaria $ pear install symfony/symfony
trabajado con un ORM es recomendable para comenzar a desarrollar. Este fichero se
utilizar Propel, sin embargo si estamos habi- denomina sandbox y basta con descompri- PEAR existe como paquete binario en la
tuados a Doctrine basta con instalar el co- mirlo en un directorio accesible para el ser- mayoría de las distros, para instalarlo por
rrespondiente plugin (sfDoctrinePlugin). vidor web. En primer lugar lo descargare- ejemplo en Ubuntu:
Symfony se apoya en otros proyectos mos ejecutando:
opensource integrando software desarro- $ sudo apt-get install php-pear
llado por los mismos. Aparte de los mencio- $ wget
nados ORM, también incluye librerías http://www.symfony-project.org En cuanto completemos la instalación,
JavaScript como Prototype y script.aculo. /get/sf_sandbox_1_2.tgz podemos crear nuestra primera aplicación,
us, utilizadas ambas para AJAX, el editor de tal y como veremos a continuación.
texto TinyMCE y el componente para añadir Luego pasamos a descomprimirlo:
calendarios de Dynarch.com, además de ■ PRIMEROS PASOS
otros proyectos PHP como Prado (soporte $ cd /var/www La mencionada sandbox incluye la configu-
para internacionalización), Spyc (para $ tar -zxvf sf_sandbox_1_2.tgz ración básica de una aplicación, sin embar-
YAML) y Pake (línea de comandos). go, habitualmente no la utilizaremos, sino
Ahora que tenemos una idea general de Podemos comprobar que todo es co- que deberemos crear nuestras propias
lo que nos ofrece Symfony es el momento rrecto accediendo a la siguiente URL a tra- aplicaciones utilizando las herramientas que
de pasar a ver cómo instalarlo en nuestro vés de nuestro navegador favorito: Symfony pone a nuestra disposición. Como
PC. http://localhost/sf_sandbox/web/frontend_ ya hemos realizado la instalación a través
dev.php de PEAR, ahora estamos listos para crear
■ INSTALACIÓN En esta página web se nos informa de nuestra primera aplicación a través de un
El primer requisito que debemos cumplir que el proyecto básico que incluye la sand- sencillo proceso. El primer paso es crear la
para instalar Symfony es el disponer de una box ha sido creado correctamente, tal y co- estructura base de la aplicación, para ello
plataforma capaz de ejecutar aplicaciones mo muestra la Figura 2. A partir de aquí ya ejecutamos:
PHP. Habitualmente, en GNU/Linux a esta podemos empezar a trabajar con Symfony
plataforma se la denomina LAMP (Linux, utilizando esta configuración inicial. $ cd /var/www
Apache, MySQL y PHP) y la mayoría de las $ cd myapp
distribuciones incluyen paquetes binarios $ symfony generate:project myapp
para la instalación del software. Dado que $ symfony generate:app frontend
esta instalación queda fuera del ámbito de
este reportaje, daremos por sentado que el Estos comando crearán una serie de di-
lector está familiarizado con el desarrollo de rectorios y ficheros básicos para la aplica-
PHP y dispone ya del software base instala- ción, entre ellos encontraremos el fichero
do en su máquina. Aunque utilizaremos index.php dentro del directorio web, que
MySQL, Symfony permite, gracias a la capa
de abstracción de base de datos, trabajar
con otros sistemas gestores de bases de
datos, como por ejemplo, PostgreSQL y
Oracle. Dado que vamos a instalar la última
versión estable de Symfony es necesario Figura 2. Proyecto creado con éxito.
tener instalada previamente, al menos la
versión 5.2 de PHP. Podemos comprobar La instalación de la sandbox está solo
esto ejecutando el comando php con el pa- pensada para entornos de desarrollo y es
rámetro -v. una forma fácil de empezar a trabajar con
Algunas distribuciones, como es el caso Symfony, sobre todo al principio cuando es-
de Ubuntu 9.04, incluyen paquetes binarios tamos aprendiendo. Sin embargo, para en-
para la instalación de Symfony. Si nuestra tornos de producción no debemos utilizar-
distribución se encuentra entre una de ellas, la, sino que debemos realizar la instalación
basta con instalar el correspondiente pa- la aplicación y sus principales librerías aso-
quete utilizando el método habitual de ins- ciadas de forma diferente. Para ello dispo-
talación. Por ejemplo, en Ubuntu ejecuta- nemos de dos opciones: utilizar PEAR (PHP Figura 3. Generando la estructura básica de la aplicación
mos: Extension and Application Repository) o di- desde línea de comandos.
será el fichero principal de acceso para el a la documentación (ver Cuadro referen- Al igual que Symfony, CakePHP utiliza
entorno de producción. cias) que aparece en la página web del como base el patrón MVC, empleando cla-
El siguiente paso es configurar nuestro proyecto para ver más detalles sobre el de- ses que proporcionan abstracción y oculta-
Apache, por ejemplo a través de la creación sarrollo de aplicaciones con esta herra- miento de información, facilitando así la ta-
de un Virtual Host, para ello añadiremos las mienta. rea de desarrollo. En comparación con
líneas que se muestran en el Listado 1 al fi- otros frameworks, CakePHP es extrema-
chero principal de configuración de este damente sencillo de configurar y utilizar. Por
servidor web (httpd.conf). ejemplo, para instalarlo basta con descom-
Seguidamente accederemos a la URL primir un tarball y empezar a escribir nues-
http://localhost/frontend_dev.php y podre- tras clases, siguiendo la convención utiliza-
mos ver que la configuración se ha realiza- da por esta herramienta. Incluso el desplie-
do de forma correcta. gue en entornos de producción es sencillo,
Symfony nos proporciona una serie de ya que es posible utilizar un único directorio
comandos para crear un esquema de base donde reside todo el código base de
de datos y el correspondiente mapping en- CakePHP y utilizar un directorio específico
tre tablas y clases utilizando por defecto el por aplicación.
ORM Propel. Es posible automatizar la crea- CakePHP utiliza una serie de clases que
ción de métodos y clases para realizar ope- actúan como ORM, sin necesidad de utilizar
raciones CRUD (Create, Read, Update and Figura 4. Formulario de alta autogenerado por Symfony. uno específico. Siguiendo una serie de con-
Delete), incluyendo las correspondientes venciones, podemos directamente crear
templates HTML con un estilo por defecto, CAKEPHP unas clases que actuarán como mapping a
las cuales podemos personalizar. Por ejem- El desarrollo de este fra- las tablas que tengamos en una base de
plo, este sería el código inicial de una clase mework comenzó allá datos creada previamente. Podemos tra-
correspondiente al modelo y enlazada a por 2005, el año en que bajar con distintos sistemas gestores de
una tabla llamada post: precisamente Ruby on bases de datos sin problema, gracias a las
Rails estaba ganando clases que incluye para realizar la abstrac-
<?php popularidad. CakePHP ción. A través de scripts como cake y bake
class Post extends BasePost { está basado en este podemos crear automáticamente clases
} framework de Ruby y aunque no pretende del modelo y formularios HTML para realizar
?> ser un port para PHP sí que está claramente operaciones CRUD, aplicando la técnica de
influenciado en él. Entre sus principales ca- scaffolding.
Para mostrar un enlace en una plantilla racterísticas destacan su diseño pensado, Los helpers son una serie de compo-
HTML que nos muestra un listado de todos para que tanto la configuración, como la uti- nentes que incorpora CakePHP para facili-
los posts, utilizaríamos el siguiente frag- lización sea sencilla, el uso intensivo de téc- tar la generación de vistas en la parte clien-
mento código: nicas propias de metodologías ágiles de te, incluyendo funcionalidades AJAX. Los fi-
desarrollo, una serie de aplicaciones para cheros que actúan como plantillas HTML
<li><?php echo link_to(‘Listado utilizar desde la consola y la compatibilidad tienen la extensión ctp y se puede utilizar di-
de posts’, ‘post/index’)?></li> con PHP 4 y 5. Precisamente, ésta es una rectamente código PHP junto a HTML es-
de las características más importantes, ya tándar, para generar la salida al cliente des-
La Figura 4 nos muestra un ejemplo que muchos servicios de hosting y/o servi- de un determinado controller.
para crear un nuevo post utilizando los for- dores antiguos solo tienen instalada la ver- La última versión estable de CakePHP
mularios y acciones generadas automáti- sión 4 de PHP. Aunque utiliza orientación a es la 1.2, aunque continuamente se liberan
camente por el framework. objetos, lo hace de forma limitada para ga- versiones que incluyen mejoras. En con-
Hasta aquí nuestra introducción a rantizar la compatibilidad con dicha versión creto, la 1.2.3.8166 fue liberada en mayo
Symfony. Recomendamos echar un vistazo de PHP. de este año. La licencia bajo la que se dis-
tribuye es la MIT license, al igual que
Symfony.
Listado 1. Fichero httpd.conf
<VirtualHost *:80>
DocumentRoot “/var/www/myapp”
DirectoryIndex index.php
Alias /sf /usr/share/php/data/symfony/web/sf
<Directory “/usr/share/php/data/symfony/web/sf”>
AllowOverride All
Allow from All
</Directory>
<Directory “/var/www/myapp/web”>
AllowOverride All
Allow from All
</Directory>
</VirtualHost>
Figura 5. Sitio web de CakePHP.
nos permite flexibilizar y elegir aquellos ello basta con ejecutar desde la línea de co- CONCLUSIONES
componentes que necesitamos para nues- mandos: Si estamos buscando un framework PHP
tras aplicaciones. Estos componentes se sin duda la elección pasa por uno de estos
encuentran divididos en una serie de cate- $ zf.sh create project myapp tres que hemos comentado aquí. Para
gorías según su funcionalidad. Entre ellos aquellos que se inician en el desarrollo con
encontramos los que sirven para aplicar el Contrariamente a CakePHP, ZF utiliza este tipo de herramientas, CakePHP pue-
MVC, otros para interactuar con una base una serie de ficheros de configuración basa- de ser la mejor opción. Si buscamos un fra-
de datos a modo de ORM, los que nos ayu- dos en propiedad=valor, siendo el principal mework flexible y apoyado por la industria
dan a escribir aplicaciones en varios idio- de ellos application/configs/application.ini. sería interesante decidirse por ZF. Symfony
mas y los que soportan la creación de servi- Por defecto, ZF incorpora un controller puede resultar algo intermedio entre la
dores y clientes de servicios web. básico llamado Bootstrap, que es una clase sencillez de CakePHP y la complejidad de
Las vistas se pueden escribir en PHP PHP que contiene el siguiente código: ZF.
mezclado con HTML, pero deben tener la En cuanto a las funcionalidades y com-
extensión .phtml. Todas las vistas deben en- class Bootstrap extends ponentes que nos ofrecen, los tres produc-
contrarse en el directorio application/views/ Zend_Application_Bootstrap_ tos son similares. Estando pendiente la
scripts. En lo que respecta a los tests, ZF re- Bootstrap { } elección de otros factores, como por ejem-
quiere y utiliza el framework PHPUnit para po- plo, si preferimos un ORM determinado o si
der automatizar la ejecución de los mismos. ZF resulta un poco más complicado de necesitamos que sea compatible con
La instalación se realiza a través de un fi- utilizar que CakePHP y Symfony. Sin embar- PHP4.
chero comprimido que podemos descar- go, es muy estable y cuenta con importan- No cabe duda que para desarrollar apli-
garnos previo registro, siendo este gratuito. tes partners del sector que lo apoyan, co- caciones complejas y que necesitamos
Actualmente la mayoría de las distros de mo por ejemplo IBM y Google. Si nunca he- mantener a lo largo del tiempo, lo mejor es
GNU/Linux no ofrecen paquetes binarios mos trabajado con un framework es reco- utilizar uno de estos frameworks. Quizá la
para la instalación de ZF desde los mismos. mendable utilizar en primer lugar Symfony o curva de aprendizaje nos lleve un poco de
Al igual que las otros dos herramientas CakePHP para familiarizarnos un poco con tiempo, pero veremos cómo compensa en
que hemos repasado, ZF incorpora una se- la terminología y la forma de trabajar. el ahorro posterior. n
rie de scripts para automatizar algunos pro-
cesos, como por ejemplo, el de creación de
Referencias �
la estructura básica de una aplicación. Para
� Sitio web oficial del proyecto Symfony. http://www.symfony-project.org/
� Prácticas cheatsheets en PDF para el desarrollo con Symfony.
http://trac.symfony-project.org/wiki/CheatSheets
� Sitio web de Propel, un ORM para PHP5. http://propel.phpdb.org/trac/
� Capa de abstracción de SGBD para PHP. http://creole.phpdb.org/trac/
� Sitio web del ORM para PHP Doctrine. http://www.doctrine-project.org/
� Web del proyecto Mojavi. http://www.mojavi.org/
� Sitio web oficial del repositorio PEAR. http://pear.php.net/
� Documentación oficial sobre Symfony.
http://www.symfony-project.org/doc/1_2
� Sitio web oficial de CakePHP. http://www.cakephp.org/
� Libro on-line oficial sobre CakePHP. http://book.cakephp.org/
� Sitio web oficial de Zend Framework. http://framework.zend.com/
Figura 7. Sitio web oficial de ZF.