Download - Drupal8 & Symfony2

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 !


Top Related