mis primeros pasos con symfony 2

50
Mis primeros pasos con Symfony 2 Edgar Dueñas Senior Web Developer [email protected] @ieddu http://www.pixtig.com/ http://www.linkedin.com/in/ieddu

Upload: edgar-duenas

Post on 20-Jun-2015

1.588 views

Category:

Technology


3 download

DESCRIPTION

Presentación dada para el DrupalCamp Guatemla 2013 que consiste en una guía para iniciar a desarrollar en Symfony 2.

TRANSCRIPT

Page 1: Mis primeros pasos con Symfony 2

Mis primeros pasos con Symfony 2

Edgar Dueñas

Senior Web Developer

[email protected]

@ieddu

http://www.pixtig.com/

http://www.linkedin.com/in/ieddu

Page 2: Mis primeros pasos con Symfony 2

Symfony 2, un framework de PHPDrupal 8, un potente y modular CMS

Page 3: Mis primeros pasos con Symfony 2

¿Porqué usar un framework?

● Porqué es un conjunto estandarizado de conceptos.

● 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.

Page 4: Mis primeros pasos con Symfony 2

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.

Page 5: Mis primeros pasos con Symfony 2

El equipo de desarrollo de Drupal 8 espera una liberación a finales de 2013.

Page 6: Mis primeros pasos con Symfony 2

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.

Page 7: Mis primeros pasos con Symfony 2

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.

Page 8: Mis primeros pasos con Symfony 2

Routing

Te permite asociar URL a diferentes áreas de la aplicación.

● Crear rutas complejas y asociarlas a controladores.

● Generar URL dentro de las plantillas y los controladores.

● Cargar rutas desde otros bundles o archivos externos.

● Depurar las rutas de la aplicación.

Page 9: Mis primeros pasos con Symfony 2

Symfony ha sido creado por una gran comunidad liderada por Fabien Potencier de

http://sensiolabs.com/

Fabien aun sigue liderando la comunidad.

Page 10: Mis primeros pasos con Symfony 2

Versiones

Las versiones estables lanzadas son:

Page 11: Mis primeros pasos con Symfony 2

¿Porqué es muy bueno?

Symfony utiliza desarrollos exitosos de terceros y los integra como librerías para ser utilizados por nosotros.

● Doctrine (ORM)● Twig

Page 12: Mis primeros pasos con Symfony 2

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.

Page 13: Mis primeros pasos con Symfony 2

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.

Page 14: Mis primeros pasos con Symfony 2

¿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.

Page 15: Mis primeros pasos con Symfony 2

¿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.

Page 16: Mis primeros pasos con Symfony 2

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.

Page 17: Mis primeros pasos con Symfony 2

Por ejemplo:

Page 18: Mis primeros pasos con Symfony 2

¿Qué es Twig?

● El framework de plantillas adoptado por Symfony 2 es Twig y utiliza la siguiente sintaxis.

Page 19: Mis primeros pasos con Symfony 2

Al grano!

Page 20: Mis primeros pasos con Symfony 2

Iniciando la instalación

● Descargamos la última versión disponible en http://symfony.com/download (seleccionamos la standard)

● Instalamos un servidor web (como apache) con PHP 5.3.3 o superior

● Copiamos el archivo descargado Symfony_Standard_Vendors_2.2.1.tgz

● Pegamos, descomprimimos y renombramos donde estará nuestro proyecto, en mi caso /var/www/

Page 21: Mis primeros pasos con Symfony 2

Carpetas y archivos

Page 22: Mis primeros pasos con Symfony 2

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:

Page 23: Mis primeros pasos con Symfony 2

Resultado

Esta pantalla nos muestra los requerimientos obligatorios y los opcionales.

Page 24: Mis primeros pasos con Symfony 2

Despues de tener todos los requerimientos solucionados podemos ingresar de esta forma a nuestro proyecto:

● http://localhost/Geducar/web/app_dev.php

Page 25: Mis primeros pasos con Symfony 2

Analizando la estructuraapp/: 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.

Page 26: Mis primeros pasos con Symfony 2

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:

Page 27: Mis primeros pasos con Symfony 2

Configurar un vhostnano /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 terminalsudo a2ensite geducar/etc/init.d/apache2 restart

Page 28: Mis primeros pasos con Symfony 2

http://www.geducar.test/app_dev.php/

Page 29: Mis primeros pasos con Symfony 2

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.

Page 30: Mis primeros pasos con Symfony 2

● 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

Otras funcionalidades

Page 31: Mis primeros pasos con Symfony 2

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.

Page 32: Mis primeros pasos con Symfony 2

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.

Page 33: Mis primeros pasos con Symfony 2

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

Page 34: Mis primeros pasos con Symfony 2

Desde la terminal

● Abrimos la terminal e ingresamos a la carpeta de nuestro proyecto.– cd /var/www/Geducar

● Escribimos en la teminal.– php app/console generate:bundle

● Con este comando se ejecutará un generador que nos hará varias preguntas para crear nuestro Bundle.

Page 35: Mis primeros pasos con Symfony 2

Paso a paso!

<-- 1

<-- 2

<-- 3

<-- 4

<-- 5

<-- 6

<-- 7<-- 8

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!

Page 36: Mis primeros pasos con Symfony 2

La estructura que genera

Page 37: Mis primeros pasos con Symfony 2

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!

Page 38: Mis primeros pasos con Symfony 2

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.

Page 39: Mis primeros pasos con Symfony 2

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.

Page 40: Mis primeros pasos con Symfony 2

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

Page 41: Mis primeros pasos con Symfony 2

Creando nueva ruta

Asumamos que crearemos una página que listarán árticulos de una tienda.

Page 42: Mis primeros pasos con Symfony 2

Creando una acciónEditamos nuestro controlador predeterminado

src/geducar/notasBundle/Controller/DefaultController.php

Luego agregaremos el método (action), que deberá llamarse articulosAction()

Page 43: Mis primeros pasos con Symfony 2

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:

Page 44: Mis primeros pasos con Symfony 2

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/

Page 45: Mis primeros pasos con Symfony 2

Ejecutamos la url y listo!!

Page 46: Mis primeros pasos con Symfony 2

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.

Page 47: Mis primeros pasos con Symfony 2

¿Preguntas?

Page 48: Mis primeros pasos con Symfony 2

Links interesantes!

● Guía de instalación: http://goo.gl/k2sLR● Conceptos: http://goo.gl/cLEHh● Guía fácil para iniciar de MW:

http://goo.gl/H7dF0● Documentación oficial:

http://symfony.com/doc/2.0/book/index.html

Page 50: Mis primeros pasos con Symfony 2

Datos de contacto

Edgar Dueñas

Senior Web Developer

[email protected]

@ieddu

http://www.pixtig.com/

http://www.linkedin.com/in/ieddu