drupal8 & symfony2

41

Upload: magd-kudama

Post on 28-May-2015

928 views

Category:

Documents


2 download

DESCRIPTION

La próxima versión de Drupal delegará parte de su funcionamiento en los componentes de Symfony2.Para conocer realmente cómo se está proyectando esta evolución, es importante conocer qué es Symfony2, cuáles son sus componentes y unas pinceladas relativas a su funcionamiento.Para ello, se explican brevemente los componentes que ya están siendo incorporados al core de Drupal8.

TRANSCRIPT

Page 1: Drupal8 & Symfony2
Page 2: Drupal8 & Symfony2

Sobre el grupo

DrupalCS@DrupalCS

Page 3: Drupal8 & Symfony2

Sobre mí

● Magd Kudama● Programador web● @MagdKudama● http://magdkudama.com

Page 4: Drupal8 & Symfony2

Pongámonos en situación

● El uso Drupal ha crecido exponencialmente en los últimos años

● La comunidad crece, los requerimientos crecen y por tanto el CMS crece

● Muchos desarrolladores en el proyecto, inmensidad de módulos

● Pero no hay suficientes desarrolladores del core Drupal

● Es necesario estandarizar el CMS a su nivel más bajo

● Se delegará el funcionamiento de algunas partes de Drupal a componentes Symfony

Page 5: Drupal8 & Symfony2

¿Symfony?

Framework: Conjunto estandarizado de conceptos, prácticas y criterios para enfocar un tipo de problemática particular, que sirve como referencia para enfrentar y resolver nuevos problemas de índole similar.

Son diseñados con la intención de facilitar el desarrollo de software, permitiendo a los diseñadores y programadores pasar más tiempo identificando requerimientos de software.

Todos sabemos leer :)

Page 6: Drupal8 & Symfony2

Características Symfony2

● Requiere PHP 5.3● Full-stack web framework● (Infinitamente) Flexible● Extensible● Tiene lo mejor de cada casa

Page 7: Drupal8 & Symfony2

La boda: Drupal8 & Symfony2

● Symfony basa su funcionamiento en componentes altamente desacoplados y genéricos

● Drupal integrará algunos componentes Symfony2

Page 8: Drupal8 & Symfony2

Componentes Symfony2

● HttpKernel

● HttpFoundation

● CssSelector

● ClassLoader

● Routing

● EventDispatcher

● Yaml

● Validator

● Security

● Locale

● ... Y un laaaaaaaargo etcétera ...

Page 9: Drupal8 & Symfony2

Componentes que integrará Drupal8

Es un tema tratado en la actualidad, pero hay componentes confirmados:

– HttpFoundation– HttpKernel– ClassLoader– EventDispatcher– Routing– DependencyInjection

Pero habrán más, seguro...

Page 10: Drupal8 & Symfony2

Symfony Components

Page 11: Drupal8 & Symfony2

HttpFoundation

Page 12: Drupal8 & Symfony2

HttpFoundation (1)

● Define una capa orientada a objetos para la especificación HTTP

● En PHP, una request viene representada por una serie de variables globales

● Y una respuesta está definida por funciones● HTTPFoundation aglutina el funcionamiento de los

objetos Request y Response en una capa OOP

Page 13: Drupal8 & Symfony2

HttpFoundation (2)

● Algo tenemos claro: HTTP es simple● De alguna forma tenemos que lograr que la

simplicidad de una petición HTTP se vea plasmada en la práctica

● HTTP Foundation permite centrarse en el viaje desde request hasta response

● Abstraerse de los extremos, centrándose en la lógica de la aplicación

Page 14: Drupal8 & Symfony2

HttpFoundation (3) - Request

● Las variables globales PHP se sustituyen por propiedades de HTTPFoundation

● Hay propiedades para obtener, updatear y filtrar los datos de la request

● También para acceso a datos de sesión de usuario

Page 15: Drupal8 & Symfony2

HttpFoundation (4) - Request

Creamos la request a partir de las variables globales de la petición PHP

O creamos una request y hacemos el override de las variables globales

Page 16: Drupal8 & Symfony2

HttpFoundation (5) - Response

● Tenemos la request... Hemos manipulado los datos, y nos encontramos en la parte final del ciclo de vida de la petición: la respuesta

● El objeto Response se encarga de enviar los datos al cliente, a partir de la información de la Request.

● Es posible indicar cabeceras, manejo de cookies, control de caché, datos de sesión, redirecciones...

Page 17: Drupal8 & Symfony2

HttpFoundation (6) - Response

Sencillo, ¿verdad? ¡Como tiene que ser!

Page 18: Drupal8 & Symfony2

HttpKernel

Page 19: Drupal8 & Symfony2

HttpKernel (1)

● Es el punto de partida perfecto para crear un framework

● Se sitúa en lo alto de HTTP Foundation● Se encarga de la parte dinámica de HTTP● Estandarizar el manejo de peticiones● HTTPCache, Asserts, excepciones...

Page 20: Drupal8 & Symfony2

ClassLoader

Page 21: Drupal8 & Symfony2

ClassLoader (1)

● Cargador de clases universal● Permite la carga automática de clases siempre y

cuando sigan una serie de normas (estándar PSR-0, seguir la convención de nombres propuesta por PEAR)

● Si las clases de tu proyecto cumplen los requisitos, no necesitarás NADA más

● Sólo se cargan las clases que se usan, y los ficheros son mucho más limpios

Page 22: Drupal8 & Symfony2

ClassLoader (2)

Cargamos el componente

Mejoremos la eficiencia: APC

Page 23: Drupal8 & Symfony2

EventDispatcher

Page 24: Drupal8 & Symfony2

EventDispatcher (1)

● Implementación del patrón de diseño Observer● Define dependencias entre objetos● Cuando uno de los objetos cambia su estado, el

observador se encarga de "avisar" al resto de objetos dependientes

● El funcionamiento es simple: uno o varios observadores se suscriben a un sujeto, quien se encarga de notificarles cuándo un evento ha tenido lugar

● Una de las mejores maneras de desacoplar el código y hacerlo más flexible

Page 25: Drupal8 & Symfony2

EventDispatcher (2)

Recibe tres argumentos: acción a la que escuchar, acción a ejecutar, y prioridad

Page 26: Drupal8 & Symfony2

EventDispatcher (3)

Es posible centralizar los eventos en una clase (mejor organización)

Page 27: Drupal8 & Symfony2

Routing

Page 28: Drupal8 & Symfony2

Routing (1)

● Mapping de peticiones HTTP● Se asocia un nombre único a un controlador● Ruta: Definición de la regla que permite al sistema

mapear una request a un controlador

Page 29: Drupal8 & Symfony2

Routing (2)

El funcionamiento en Symfony es sencillo:● Se crea una colección de rutas (RouteCollection)● El Matcher se encarga de extraer los metadatos de

la request, para así asignarla a un controlador● Problema: Las rutas se crean en tiempo de

ejecución. Drupal requiere cientos de rutas, por lo que la solución que propone el componente no escala lo suficiente

Page 30: Drupal8 & Symfony2

Routing (3)

Se sustituye el sistema de Routing que viene por defecto en Symfony por Chain Routing:● No rutea nada por sí solo● Las rutas se definen en la BD, y se agrupan por

prioridad● Se registran la lista de routers, y se tratan por

orden para hacer el matching y generar las rutas necesarias

● Para encontrar la ruta, se utiliza un algoritmo best-fit (el que más se ajuste)

Page 31: Drupal8 & Symfony2

DependencyInjection

Page 32: Drupal8 & Symfony2

DependencyInjection (1)

● Patrón de diseño orientado a objetos, en el que se suministran objetos a una clase en lugar de ser la propia clase quien cree el objeto

● Es una implementación de IoC. El principal cometido del contenedor es el de gestionar el ciclo de vida de los objetos

● Existe un contenedor (DIC) encargado de crear los servicios y las dependencias entre ellos

● Mejoran las pruebas unitarias, y consiguen una arquitectura mucho más clara y flexible

● Estandariza y centraliza la forma en la que los objetos son construidos

Page 33: Drupal8 & Symfony2

DependencyInjection (2)

Como servicio:

¡Poco flexible!

Page 34: Drupal8 & Symfony2

DependencyInjection (3)

Y el método de transporte se define en el servicio:

Mmmm... ¿Siempre será sendmail?

Page 35: Drupal8 & Symfony2

DependencyInjection (4)

Page 36: Drupal8 & Symfony2

DependencyInjection (5)

Y aun es más configurable...

Page 37: Drupal8 & Symfony2

Conclusiones

Page 38: Drupal8 & Symfony2

¡ Symfony2 es un gran framework, y sus componentes son realmente buenos !

Conclusión 1

Page 39: Drupal8 & Symfony2

Con la unión, ambas comunidades ganan enteros

Conclusión 2

Page 40: Drupal8 & Symfony2

¿Os interesa Drupal?...

...tenéis que incentivar el desarrollo del framework Symfony

Conclusión 3

Page 41: Drupal8 & Symfony2

¡ Muchas gracias !