Upload
vokhue
View
268
Download
0
Embed Size (px)
Citation preview
Framework Symfony PHP
U n i v e r s i d a d d e l C a u c a
2 9 / 0 5 / 2 0 1 2
Alexander Romero Narváez
Este es un pequeño tutorial que consta de la
instalación y programación de un ejemplo de este
framework en PHP.
Framework Symfony PHP
Universidad del Cauca – Ingeniería de sistemas Página 1
TUTORIAL FRAMEWORK SYMFONY PHP
INGENIERÍA DEL SOFTWARE
PRESENTADO A:
Magister. Libardo Pantoja
PRESENTADO POR:
Alexander Romero Narváez
UNIVERSIDAD DEL CAUCA
FACULTAD DE INGENIERÍA ELECTRÓNICA Y TELECOMUNACIONES
INGENIERÍA DE SISTEMAS
POPAYÁN, 29 DE MAYO DE 2012
Framework Symfony PHP
Universidad del Cauca – Ingeniería de sistemas Página 2
Tabla de contenido
INTRODUCCIÓN ............................................................................................................................. 3
REQUISITOS PREVIOS .................................................................................................................... 4
INSTALACIÓN ................................................................................................................................. 7
Instalando Symfony mediante PEAR ......................................................................................... 7
CONFIGURACIÓN SYMFONY PHP ................................................................................................ 10
Crear el Proyecto ..................................................................................................................... 10
Configurar el servidor web ...................................................................................................... 12
Base de datos y esquema ........................................................................................................ 13
EJEMPLO SYMFONY PHP ............................................................................................................. 16
Generando las clases del formulario ....................................................................................... 16
CRUD ....................................................................................................................................... 17
BIBLIOGRAFIA .............................................................................................................................. 21
Framework Symfony PHP
Universidad del Cauca – Ingeniería de sistemas Página 3
INTRODUCCIÓN
Symfony es un completo framework diseñado para optimizar el desarrollo de las aplicaciones
web mediante algunas de sus principales características. Para empezar, separa la lógica de
negocio, la lógica de servidor y la presentación de la aplicación web. Proporciona varias
herramientas y clases encaminadas a reducir el tiempo de desarrollo de una aplicación web
compleja. Además, automatiza las tareas más comunes, permitiendo al desarrollador
dedicarse por completo a los aspectos específicos de cada aplicación. El resultado de todas
estas ventajas es que no se debe reinventar la rueda cada vez que se crea una nueva aplicación
web.
Symfony está desarrollado completamente en PHP 5.3. Ha sido probado en numerosos
proyectos reales y se utiliza en sitios web de comercio electrónico de primer nivel. Symfony es
compatible con la mayoría de gestores de bases de datos, como MySQL, PostgreSQL, Oracle y
Microsoft SQL Server. Se puede ejecutar tanto en plataformas *nix (Unix, Linux, etc.) como en
plataformas Windows.
El uso de un framework que utiliza MVC obliga a dividir y organizar el código de acuerdo a las
convenciones establecidas por el framework. El código de la presentación se guarda en la vista,
el código de manipulación de datos se guarda en el modelo y la lógica de procesamiento de las
peticiones constituye el controlador. Aplicar el patrón MVC a una aplicación resulta bastante
útil además de restrictivo
Framework Symfony PHP
Universidad del Cauca – Ingeniería de sistemas Página 4
REQUISITOS PREVIOS
El único requisito técnico para instalar Symfony 1.0 es el de disponer de la versión 5.0 o
superior de PHP instalada y configurada correctamente.
Para ello vamos a disponer de la herramienta WAMP que la podemos encontrar en el siguiente
enlace; http://www.wampserver.com/en/. Se debe instalara la versión de su preferencia,
como sugerencia se le pide instalara una versión completamente estable para no tener
inconvenientes con la configuración previa. El uso de un WAMP permite servir páginas html a
internet, además de poder gestionar datos en ellas, al mismo tiempo un WAMP, proporciona
lenguajes de programación para desarrollar aplicaciones web.
Como acto siguiente nos disponemos a la configurar la herramienta WAMP. Para ello
activamos el modulo rewrite de APACHE de la herramienta WAMP, de la siguiente forma:
Y seleccionamos la opción, es decir activando este modo.
Luego tenemos que activar la extensión php_xsl de PHP, del archivo php.ini, de la siguiente
forma:
Framework Symfony PHP
Universidad del Cauca – Ingeniería de sistemas Página 5
Y le quitamos el # de la línea de código extension=php_xsl.dll
Para no presentar ningún inconveniente con la instalación de Symfony, necesitamos configurar
las variables de entorno del sistema, esto lo podemos hacer de la siguiente manera:
Nos dirigimos a Panel de control\Sistema y seguridad\Sistema
En Sistema miramos la parte en Protección del sistema/Opciones avanzadas/Variables de
entorno
Framework Symfony PHP
Universidad del Cauca – Ingeniería de sistemas Página 6
Seleccionamos de Variables del Sistema, Path y seleccionamos la opción editar
Agregamos las siguientes líneas, separadas de punto y coma (;) y damos clic en Aceptar.
C:\wamp\bin\php\php5.3.0
C:\wamp\bin\mysql\mysql5.0.37\bin
De está manera no vamos a tener ningún problema en el momento de instalar Symfony.
Framework Symfony PHP
Universidad del Cauca – Ingeniería de sistemas Página 7
INSTALACIÓN
Antes de empezar a desarrollar aplicaciones Symfony, es necesario instalar los archivos y
librerías que componen el framework. Como Symfony está programado con PHP y sus
creadores han sido muy cuidadosos, Symfony funciona igual de bien en cualquier sistema
operativo (Windows, Mac OS X y Linux).
Por este motivo, la instalación es idéntica en cualquier sistema operativo y tan sólo es
necesario modificar las rutas de los directorios y algún otro detalle menor. Como Symfony se
puede instalar de tres formas diferentes, en primer lugar tienes que decidir qué tipo de
instalación quieres realizar:
Si sólo quieres probar Symfony lo más rápido posible para ver sus posibilidades,
deberías instalarte el entorno de pruebas o sandbox.
Si ya conoces Symfony y quieres que todos tus proyectos utilicen la misma versión del
framework, deberías realizar la instalación mediante PEAR.
Si quieres que cada proyecto disponga de su propia versión de Symfony, deberías
realizar la instalación mediante el repositorio Subversion, que además es la forma
recomendada por los creadores de Symfony.
Las instrucciones de instalación dependen de la versión de Symfony que vayas a utilizar.
Nosotros nos vamos a basar en Symfony 1.0 además la instalación la realizaremos median
PEAR.
Instalando Symfony mediante PEAR La versión de PEAR requerida es 1.4.0 o superior, que ya se incluye en la mayoría de
distribuciones de PHP. Para instalar Symfony de esta manera, en primer lugar se debe añadir el
canal Symfony a PEAR.
En la consola de comandos de tu sistema operativo, añade siguiente comando:
pear channel-discover pear.symfony-project.com
Para instalar Symfony 1.0, simplemente ejecuta el siguiente comando indicando el número de
la versión que quieres instalar:
pear install symfony/symfony-1.0.17
Framework Symfony PHP
Universidad del Cauca – Ingeniería de sistemas Página 8
Mediante las siguientes líneas de comando podemos también instalar PEAR
Framework Symfony PHP
Universidad del Cauca – Ingeniería de sistemas Página 9
Una vez añadido el canal, ya es posible instalar la última versión estable de Symfony mediante
el siguiente comando:
Los archivos y las utilidades de línea de comandos de Symfony ya se han instalado. Pero te
puedes asegurar mediante la siguiente línea de comando:
symfony –V
Inmediatamente se refleja la versión de Symfony: symfony version 1.0.0
Framework Symfony PHP
Universidad del Cauca – Ingeniería de sistemas Página 10
CONFIGURACIÓN SYMFONY PHP
Crear el Proyecto Los proyectos de Symfony siguen una estructura de directorios predefinida. Los comandos que
proporciona Symfony permiten automatizar la creación de nuevos proyectos, ya que se
encargan de crear la estructura de directorios básica del proyecto y con los permisos
adecuados. Por tanto, para crear un proyecto se debe crear un directorio y decirle a Symfony
que cree un proyecto en su interior. Ejecuta las siguientes líneas de comandos como muestra
la figura; para poder realizar un Proyecto en Symfony:
Framework Symfony PHP
Universidad del Cauca – Ingeniería de sistemas Página 11
La estructura de los directorios creado por Symfony es la siguiente:
apps/
batch/
cache/
config/
data/
doc/
lib/
log/
plugins/
test/
web/
El proyecto recién creado está incompleto, ya que requiere por lo menos de una aplicación.
Para crear la aplicación, se utiliza el comando symfony init-app, al que se le tiene que pasar
como argumento el nombre de la nueva aplicación. Mediante las siguiente línea de comando
que se muestra en la figura se puede realizar esto:
Framework Symfony PHP
Universidad del Cauca – Ingeniería de sistemas Página 12
Configurar el servidor web la configuración necesaria para crear un nuevo servidor virtual en Apache mediante la
modificación del archivo httpd.conf.
Para ello ingresamos a WAMP, ingresamos a APACHE y configuramos el documento
Y agregamos las siguientes líneas de código como se muestra en la imagen:
<VirtualHost *:80>
ServerName miaplicacion.ejemplo.com
DocumentRoot "/home/juan/miproyecto/web"
DirectoryIndex index.php
Alias /sf /$sf_symfony_data_dir/web/sf
<Directory "/$sf_symfony_data_dir/web/sf">
AllowOverride All
Allow from All
</Directory>
<Directory "/home/steve/miproyecto/web">
AllowOverride All
Allow from All
</Directory>
</VirtualHost>
Guardamos y reiniciamos los servicios de WAMP, para que los cambios surtan efecto.
La aplicación recién creada ya se puede acceder con cualquier navegador en esta dirección:
http://localhost:8080/miaplicacion_dev.php/
Framework Symfony PHP
Universidad del Cauca – Ingeniería de sistemas Página 13
Base de datos y esquema Una vez creada la estructura básica del proyecto, se definen las opciones de conexión con la
base de datos y se crea el esquema que representa el modelo de datos del proyecto. Las
opciones de conexión se definen en el archivo de configuración
miproyecto/config/databases.yml en el que se deben descomentarea todas sus líneas
eliminando el carácter # que se incluye por defecto al principio de cada línea:
all:
propel:
class: sfPropelDatabase
param:
classname: PropelPDO
dsn: mysql:dbname=miproyecto;host=localhost
username: root
password:
encoding: utf8
persistent: true
pooling: true
La única opción que se debe modificar es el dsn que define las opciones de conexión con la
base de datos. Symfony permite utilizar bases de datos de tipo SQLite, MySQL, PostgreSQL,
Oracle y SQL Server. Cambiar de base de datos sólo requiere modificar la opción dsn, ya que el
resto de la aplicación funciona igual de bien con cualquier sistema gestor de base de datos.
La única opción que se debe modificar es el dsn que define las opciones de conexión con la
base de datos. Symfony permite utilizar bases de datos de tipo SQLite, MySQL, PostgreSQL,
Oracle y SQL Server. Cambiar de base de datos sólo requiere modificar la opción dsn, ya que el
resto de la aplicación funciona igual de bien con cualquier sistema gestor de base de datos.
Framework Symfony PHP
Universidad del Cauca – Ingeniería de sistemas Página 14
Una vez definida la conexión con la base de datos, se crea en el archivo
miproyecto/config/schema.yml el esquema de la base de datos que representa el modelo de
datos del proyecto:
propel:
Users:
_attributes: { phpName: User }
id:
first_name: varchar(50)
last_name: varchar(50)
email: varchar(50)
login: varchar(10)
password: varchar(50)
created_at:
El tipo de dato no es obligatorio, ya que en algunos casos, Symfony es capaz de deducirlo a
partir del nombre de la columna. Si por ejemplo una columna se llama id, salvo que se le
indique lo contrario, Symfony supone que es la clave primaria de la tabla y, por tanto, que es
de tipo entero, que no puede tomar valores null y que su valor se autoincrementa.
Otras columnas mágicas son created_at y updated_at. Si una columna se llama created_at,
Symfony la considera de tipo “fecha y hora” y cada vez que se crea un registro en la tabla,
Symfony se encarga de asignarle el valor correcto de forma automática. La columna
updated_at también se considera de tipo “fecha y hora” y su valor se actualiza
automáticamente cada vez que se modifica el registro de la base de datos.
Una vez definido el esquema, se ejecuta el comando symfony propel-build-model para generar
(en el directorio lib/model) todas las clases PHP que se encargan de manejar la base de datos
mediante objetos. Por otra parte, el comando
symfony propel-build-sql
Este genera en el archivo miproyecto/data/sql/lib.model.schema.sql el archivo SQL que
permite crear la base de datos, como muestra la imagen.
Framework Symfony PHP
Universidad del Cauca – Ingeniería de sistemas Página 15
También es posible utilizar el comando symfony propel-build-all para generar de forma
simultánea las clases del modelo y el archivo SQL. Los comandos anteriores se utilizan cuando
no existía previamente la base de datos.
Si antes de empezar el proyecto Symfony ya dispones de una base de datos, puedes hacer el
trabajo inverso: generar el esquema y las clases PHP a partir de una base de datos existente.
Framework Symfony PHP
Universidad del Cauca – Ingeniería de sistemas Página 16
EJEMPLO SYMFONY PHP
Generando las clases del formulario En los siguientes ejemplos se va a modificar la información de la tabla articulo Para ello, se
crean formularios asociados a cada una de las tablas y se configuran los widgets y validadores
relacionados con el esquema de la base de datos. Aunque es posible crear estos formularios a
mano, se trata de una tarea tediosa y pesada, además de que obliga a repetir la misma
información en varios archivos (nombre de columans y campos, máximo tamaño de columnas
y campos, etc.) Además, si los formularios se hacen a mano, cada vez que se modifica el
modelo, se debe modificar la clase del formulario asociado. Afortunadamente, el plugin de
Propel incluye una tarea llamada propel_build-forms que automatiza todo este proceso y
genera los formularios relacionados con un objeto del modelo de datos:
$ ./symfony propel:build-forms
Después de ejecutar esta tarea, se crea una estructura de archivos en el directorio lib/form/.
Considerando el modelo de datos del ejemplo anterior, se crea la siguiente estructura de
archivos:
lib/
form/
BaseFormPropel.class.php
ArticuloForm.class.php
ArticuloEtiquetaForm.class.php
AutorForm.class.php
base/
BaseArticuloForm.class.php
BaseArticuloEtiquetaForm.class.php
BaseAutorForm.class.php
Clase BaseAutorForm que representa el formulario de la tabla autor, lleva este segmento de
código.
class BaseAutorForm extends BaseFormPropel
{
public function setup()
{
$this->setWidgets(array(
'id' => new sfWidgetFormInputHidden(),
'nombre' => new sfWidgetFormInput(),
'apellidos' => new sfWidgetFormInput(),
'email' => new sfWidgetFormInput(),
));
$this->setValidators(array(
Framework Symfony PHP
Universidad del Cauca – Ingeniería de sistemas Página 17
'id' => new sfValidatorPropelChoice(array('model' =>
'Autor', 'column' => 'id', 'required' => false)),
'nombre' => new sfValidatorString(array('max_length' => 20,
'required' => false)),
'apellidos' => new sfValidatorString(array('max_length' => 20,
'required' => false)),
'email' => new sfValidatorString(array('max_length' =>
255)),
));
$this->widgetSchema->setNameFormat('autor[%s]');
$this->errorSchema = new sfValidatorErrorSchema($this-
>validatorSchema);
parent::setup();
}
public function getModelName()
{
return 'Autor';
}
}
CRUD frontend: nombre de la aplicación en la que se va a crear el módulo
autor: nombre del módulo que se va a crear
Autor: nombre de la clase del modelo en la que se basa el módulo
En la clase autorActions escribir las líneas de código
class autorActions extends sfActions
{
public function executeIndex()
{
$this->autorList = AutorPeer::doSelect(new Criteria());
}
public function executeCreate()
{
$this->form = new AutorForm();
$this->setTemplate('edit');
}
public function executeEdit($request)
Framework Symfony PHP
Universidad del Cauca – Ingeniería de sistemas Página 18
{
$this->form = new AutorForm(AutorPeer::retrieveByPk($request-
>getParameter('id')));
}
public function executeUpdate($request)
{
$this->forward404Unless($request->isMethod('post'));
$this->form = new AutorForm(AutorPeer::retrieveByPk($request-
>getParameter('id')));
$this->form->bind($request->getParameter('autor'));
if ($this->form->isValid())
{
$autor = $this->form->save();
$this->redirect('autor/edit?id='.$autor->getId());
}
$this->setTemplate('edit');
}
public function executeDelete($request)
{
$this->forward404Unless($autor = AutorPeer::retrieveByPk($request-
>getParameter('id')));
$autor->delete();
$this->redirect('autor/index');
}
}
Framework Symfony PHP
Universidad del Cauca – Ingeniería de sistemas Página 19
Luego, para poder mostrar la información se debe realizar el siguiente segmento de código en
editSuccess
<?php $autor = $form->getObject() ?>
<h1><?php echo $autor->isNew() ? 'New' : 'Edit' ?> Autor</h1>
<form action="<?php echo url_for('autor/edit'.(!$autor->isNew() ? '?id='.$autor-
>getId() : '')) ?>" method="post" <?php $form->isMultipart() and print
'enctype="multipart/form-data" ' ?>>
<table>
<tfoot>
<tr>
<td colspan="2">
<a href="<?php echo url_for('autor/index') ?>">Cancel</a>
<?php if (!$autor->isNew()): ?>
<?php echo link_to('Delete', 'autor/delete?id='.$autor->getId(),
array('post' => true, 'confirm' => 'Are you sure?')) ?>
<?php endif; ?>
<input type="submit" value="Save" />
</td>
</tr>
</tfoot>
<tbody>
<?php echo $form ?>
</tbody>
</table>
</form>
Framework Symfony PHP
Universidad del Cauca – Ingeniería de sistemas Página 20
CONCLUSIONES Y LECCIONES APRENDIDAS
Este framework (Symfony) antes de resultar ser productivo para realizar aplicaciones web y
comprender su funcionamiento, requiere de muchas horas de estudio, pero medida a que nos
adentramos a este framework, se llega a dar cuenta de que el tiempo invertido de estudio
valió la pena. A pesar de que el trabajo realizado en este tutorial no muestra en gran manera
del funcionamiento de symfony, podemos concluir de que se pude puede realizar
actualizaciones y mantenimiento a las aplicaciones web, esto se debe a que la generación e
código es de muy buena calidad y fácil entender. Symfony a grandes rasgos en un framework
muy completo, estable, con muy buena documentación frente a todo lo que Symfony nos
puede ofrecer. Uno de las grandes ventajas que presenta este framework es que se trata de
software libre, con licencia MIT, con la que puedes desarrollar aplicaciones libres o
comerciales, además de que funciona con PHP, lo que garantiza sin duda un muy buen
funcionamiento, además de que programar con Symfony resulta ser muy fácil, ya que
simplifica en gran manera las aplicaciones de patrones de diseño, entre otras muchas ventajas
que presenta este framework.
Un problema que puede resultar con este framework; es la instalación de este, ya que toca
tener en cuenta muchos detalles, como por ejemplo el de modificar o editar las variables de
entorno del sistema operativo, en este caso el Path, este es un conflicto que se tiene por lo
general, ya que si no se realiza, las instalación no se puede realizar con satisfacción.
Framework Symfony PHP
Universidad del Cauca – Ingeniería de sistemas Página 21
BIBLIOGRAFÍA
http://trac.symfony-project.org/#Installingsymfony
http://forum.symfony-project.org/
http://www.symfony-project.org/installation
http://www.symfony.es/
http://www.librosweb.es/symfony/index.html