1. Mis primeros pasos con Symfony 2
Edgar Dueñas
Senior Web Developer
edgar@pixtig.com
@ieddu
http://www.pixtig.com/
http://www.linkedin.com/in/ieddu
2. Symfony 2, un framework de PHP
Drupal 8, un potente y modular CMS
3. ¿Porqué usar un framework?
●
Porqué es
conceptos.
un
conjunto
estandarizado
●
Fomenta la reutilización de código.
●
Fomenta código más seguro y mantenible.
●
Acelera el desarrollo de aplicaciones.
●
Agrega una estructura estándar al código.
●
Integra diversas herramientas.
●
No hay necesidad de reinventar la rueda.
de
4. Porqué Drupal y Symfony?
Drupal adoptará algunos de los componentes de
Symfony para su próxima versión 8. Utilizarán los
componentes principales de Symfony 2:
●
HttpFoundation,
●
HttpKernel,
●
Routing,
●
EventDispatcher,
●
DependencyInjection,
●
and ClassLoader.
5. El equipo de desarrollo de Drupal 8 espera una
liberación a finales de 2013.
6. HttpKernel
Al adoptar HttpKernel, proyectos de Drupal y
Symfony se harán más interoperable. Esto
significa que usted será capaz de integrar
fácilmente
las
aplicaciones
Symfony
personalizados con Drupal ... y vice-versa.
Esta es una muy buena noticia para ambas
comunidades.
7. HttpFoundation
En PHP, la petición están representados por algunas
variables globales ($ _GET, $ _POST, $ _FILES, $
_COOKIE, $ _SESSION, ...) y la respuesta es
generada por algunas funciones (echo, header,
setcookie, ...).
El componente HttpFoundation Symfony2 sustituye por
defecto estas variables y funciones globales de PHP
por una capa orientada a objetos.
8. Routing
Te permite asociar URL a diferentes áreas de la
aplicación.
●
●
●
●
Crear rutas
controladores.
complejas
y
asociarlas
a
Generar URL dentro de las plantillas y los
controladores.
Cargar rutas desde otros bundles o archivos
externos.
Depurar las rutas de la aplicación.
9. Symfony ha sido creado por una gran
comunidad liderada por Fabien Potencier de
http://sensiolabs.com/
Fabien aun sigue liderando la comunidad.
11. ¿Porqué es muy bueno?
Symfony utiliza desarrollos exitosos de
terceros y los integra como librerías para ser
utilizados por nosotros.
●
Doctrine (ORM)
●
Twig
12. Características
●
Utiliza el lenguaje YAML
●
Cuenta con instrucciones de consola (tasks)
●
●
Contiene un subframework para trabajar con
formularios
Contamos con un gran número delibrerías,
herramientas y helpers.
13. Arquitectura MVC
Imagen tomada del manual oficial de Symfony
Esta arquitectura permite dividir nuestras aplicaciones en tres grandes capas, separa la lógica de
negocio, la lógica de servidor y la presentación de la aplicación web.
14. ¿Qué es un ORM?
●
●
La siglas ORM provienen de Object-Relational
mapping o Mapeo entre Objetos y Relaciones.
Es un framework encargado de tratar con
nuestra base de datos desde la conexión,
generación de SQL, manipulación de datos,
transacciones y desconexión.
15. ¿Cuál es la diferencia?
●
●
En los motores de base de datos se dice que cada tabla es
una relación, de ahí el nombre de base de datos
relacionales.
Con un ORM trabajamos unicamente orientado a objetos y
por ello decimos que tratamos con objetos y no con tablas.
–
Se crea una clase que mapea cada relación de la DB.
–
En vez de hablar directamente con la DB en lenguaje SQL,
nosotros los programadores, hablamos con los objetos y Doctrine
se encagará de traducirlo a SQL.
16. La ventaja
●
Con esto logramos una abstracción del 100%
con relación al motor de base de datos.
●
●
Ya no nos importa el lenguaje
que utiliza el motor de base de
datos.
Nos conectamos a casi
cualquier motor de base de
datos fácilmente.
20. Iniciando la instalación
●
●
●
●
Descargamos la última versión disponible
http://symfony.com/download
(seleccionamos
standard)
en
la
Instalamos un servidor web (como apache) con PHP
5.3.3 o superior
Copiamos
el
archivo
Symfony_Standard_Vendors_2.2.1.tgz
descargado
Pegamos, descomprimimos y renombramos donde
estará nuestro proyecto, en mi caso /var/www/
22. Revisando con check.php
●
Para saber si nuestro servidor cuenta con
todo lo necesario para soportar el framework
podemos ejecutar el archivo check.php que se
encuentra en la carpeta app/ del proyecto
descargado de la siguiente manera:
24. Despues de tener todos los requerimientos
solucionados podemos ingresar de esta forma
a nuestro proyecto:
●
http://localhost/Geducar/web/app_dev.php
25. Analizando la estructura
app/: Aquí se encuentra la
configuración correspondiente a
todo el proyecto.
bin/: Dentro de esta carpeta
tenemos el script vendors.sh que
se utiliza para actualizar el
framework vía consola.
src/: Esta es la carpeta donde irá
todo nuestro código y es aquí
donde se encuentras los Bundles
que básicamente son carpetas
que
representan
nuestras
aplicaciones.
vendor/: En esta carpeta se encuentran los archivos del framework Symfony y de las
demás librerías de terceros como por ejemplo Doctrine, Twig, etc.
web/: En la carpeta web es donde deberán estar los archivos públicos del proyecto
como los javascripts, css, etc. También se encuentran dentro de esta carpeta los
controladores frontales que se explican a continuación.
26. Controladores frontales
Es importante saber que los archivos que no se
encuentren dentro de la carpeta web/ no pueden y no
deben ser accedidos por el navegador.
Por lo tanto nuestras páginas y programas que son
guardados dentro de la carpeta src/ no son
directamente accedidos por el navegador sino a través
de los controladores frontales.
Para acceder unicamente a la carpeta web se realiza
lo siguiente:
27. Configurar un vhost
nano /etc/apache2/sites-available/geducar
<VirtualHost *:80>
DocumentRoot "/var/www/Geducar/web"
DirectoryIndex app.php
ServerName www.geducar.test
<Directory "/var/www/Geducar/web">
AllowOverride All
Allow from All
</Directory>
</VirtualHost>
nano /etc/hosts y agrego lo siguiente:
127.0.0.1
www.geducar.test
Ejecutamos en la terminal
sudo a2ensite geducar
/etc/init.d/apache2 restart
29. Controladores frontales
Dentro de la carpeta web/ vemos que existen
dos archivos: “app.php” y “app_dev.php”,
estos son los archivos llamados controladores
frontales.
La diferencia entre ambos es que symfony
maneja entornos de desarrollo y producción.
30. Otras funcionalidades
●
●
Cache de Symfony
Symfony profiler
–
●
Nos da información actualizada por cada request sobre varias
cosas útiles para el desarrollador como parámetros del
request, sentencias SQL ejecutadas, tiempos transcurridos,
datos de sesión, etc.
Mensajes de error
31. Los Bundles
●
●
●
Un Bundle es una carpeta que contiene los
archivos necesarios para un grupo de
funcionalidades
específicas,
como
por
ejemplo un blog.
Los bundles deben de ir en la carpeta src/
Una aplicación podrá contener todos los
Bundles
que
queramos,
simplemente
debemos crearlos y registrarlos.
32. Recomendación
●
●
Lo ideal es no guardar directamente los
bundles dentro src/ sino dentro de una
carpeta.
La carpeta puede ser el nombre de empresa o
organización.
33. Creando nuestro Bundle
●
Primero liberamos la url de bienvenida
http://www.geducar.test/app_dev.php/
Editamos:
app/config/routing_dev.yml
En la línea número 2 agregamos el
texto “welcome” al final de la línea.
Ahora podemos ingresar desde
nuestro navegador a la página de
bienvenida
desde:
http://www.geducar.test/app_dev.php
/welcome
34. Desde la terminal
●
Abrimos la terminal e ingresamos a la carpeta
de nuestro proyecto.
–
●
Escribimos en la teminal.
–
●
cd /var/www/Geducar
php app/console generate:bundle
Con este comando se ejecutará un generador
que nos hará varias preguntas para crear
nuestro Bundle.
35. Paso a paso!
1. Lo primero que nos pide será el namespace o
carpeta contenedora del Bundle. Esto lo hacemos
escribiendo: geducar/notasBundle.
2. A continuación nos pedirá un nombre identificador
del Bundle para el proyecto y nos propone entre
corchetes la concatenación geducarnotasBundle.
Para aceptar la propuesta daremos enter.
3. A continuación nos preguntará donde queremos
que se guarde el nuevo bundle creado.
Aceptaremos la propuesta.
4. Nos pide el formato de archivo que usará para las
configuraciones del Bundle. Nos propone
[annotations] pero le diremos que queremos que
sea “yml”.
5. Luego nos pregunta si queremos que nos genere
una estructura completa para el bundle y le vamos
a decir que “no” ya que necesitamos solo la base.
6. Confirmamos si todo esta bien y escribimos “yes”
7. Nos pregunta si queremos registrar nuestro Bundle
en el archivo app/AppKernel.php a lo que le
diremos que si.
8. Nos pregunta si queremos actualizar el archivo
app/config/routing.yml y le decimos que si.
9. Con esto ya tenemos nuestro Bundle!
<-- 1
<-- 2
<-- 3
<-- 4
<-- 5
<-- 6
<-- 7
<-- 8
37. Verificamos
●
Para verificar que mi bundle se haya creado
bien ingresamos a la página de ejemplo que
se crea automaticamente:
–
●
http://www.geducar.test/app_dev.php/hello/edgar
Nos aparece una página en blanco con el
siguiente texto:
–
Hello edgar!
38. Creando una página
Para crear una página tomar en cuenta estos tres pasos:
1) Asignación de una ruta: Una dirección URL asignada a la
página para que el controlador frontal la pueda acceder.
2) Creación de una acción (action): La lógica necesaria para
la página. Corresponde al Controlador en arquitectura MVC.
3) Creación de la plantilla (template): La estructura de nuestra
página. Corresponde a la Vista en arquitectura MVC.
39. Asignación de una ruta
Las rutas se refieren a la dirección URL que
utilizará el controlador frontal para acceder a
nuestra página.
Las rutas se configurán en lenguaje yaml
app/config/routing.yml.
Importamos el routing de nuestro bundle.
40. Las ruta de nuestro Bundle
●
Se encuentra en:
/src/geducar/notasBundle/config/routing.yml
Más información sobre el lenguaje Yaml: http://es.wikipedia.org/wiki/YAML
42. Creando una acción
Editamos nuestro controlador predeterminado
src/geducar/notasBundle/Controller/DefaultController.php
Luego agregaremos el método (action), que deberá llamarse
articulosAction()
43. Creando nuestra vista
Crearemos un archivo dentro de la carpeta
/Resources/views/Default de nuestro bundle con
el nombre articulos.html.twig
Agregamos lo siguiente:
44. Twig nos provee
mucha habilidad para
manipular los datos
sin escribir código
PHP.
Podemos acceder a
las claves de nuestro
array por medio de
articulo.id
o
articulo['id'].
Más información sobre Twig en http://twig.sensiolabs.org/
46. Formularios
Gestionar formularios HTML es una de las tareas
más comunes y difíciles para un desarrollador
web.
En Symfony esto es sencillo!
Symfony 2 integra un componente llamado Form
que simplifica el manejo de los formularios.