Drupal8 & Symfony2
-
Upload
magd-kudama -
Category
Documents
-
view
936 -
download
2
description
Transcript of Drupal8 & Symfony2
![Page 1: Drupal8 & Symfony2](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/1.jpg)
![Page 2: Drupal8 & Symfony2](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/2.jpg)
Sobre el grupo
DrupalCS@DrupalCS
![Page 3: Drupal8 & Symfony2](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/3.jpg)
Sobre mí
● Magd Kudama● Programador web● @MagdKudama● http://magdkudama.com
![Page 4: Drupal8 & Symfony2](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/4.jpg)
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](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/5.jpg)
¿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](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/6.jpg)
Características Symfony2
● Requiere PHP 5.3● Full-stack web framework● (Infinitamente) Flexible● Extensible● Tiene lo mejor de cada casa
![Page 7: Drupal8 & Symfony2](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/7.jpg)
La boda: Drupal8 & Symfony2
● Symfony basa su funcionamiento en componentes altamente desacoplados y genéricos
● Drupal integrará algunos componentes Symfony2
![Page 8: Drupal8 & Symfony2](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/8.jpg)
Componentes Symfony2
● HttpKernel
● HttpFoundation
● CssSelector
● ClassLoader
● Routing
● EventDispatcher
● Yaml
● Validator
● Security
● Locale
● ... Y un laaaaaaaargo etcétera ...
![Page 9: Drupal8 & Symfony2](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/9.jpg)
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](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/10.jpg)
Symfony Components
![Page 11: Drupal8 & Symfony2](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/11.jpg)
HttpFoundation
![Page 12: Drupal8 & Symfony2](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/12.jpg)
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](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/13.jpg)
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](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/14.jpg)
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](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/15.jpg)
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](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/16.jpg)
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](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/17.jpg)
HttpFoundation (6) - Response
Sencillo, ¿verdad? ¡Como tiene que ser!
![Page 18: Drupal8 & Symfony2](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/18.jpg)
HttpKernel
![Page 19: Drupal8 & Symfony2](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/19.jpg)
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](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/20.jpg)
ClassLoader
![Page 21: Drupal8 & Symfony2](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/21.jpg)
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](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/22.jpg)
ClassLoader (2)
Cargamos el componente
Mejoremos la eficiencia: APC
![Page 23: Drupal8 & Symfony2](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/23.jpg)
EventDispatcher
![Page 24: Drupal8 & Symfony2](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/24.jpg)
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](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/25.jpg)
EventDispatcher (2)
Recibe tres argumentos: acción a la que escuchar, acción a ejecutar, y prioridad
![Page 26: Drupal8 & Symfony2](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/26.jpg)
EventDispatcher (3)
Es posible centralizar los eventos en una clase (mejor organización)
![Page 27: Drupal8 & Symfony2](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/27.jpg)
Routing
![Page 28: Drupal8 & Symfony2](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/28.jpg)
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](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/29.jpg)
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](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/30.jpg)
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](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/31.jpg)
DependencyInjection
![Page 32: Drupal8 & Symfony2](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/32.jpg)
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](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/33.jpg)
DependencyInjection (2)
Como servicio:
¡Poco flexible!
![Page 34: Drupal8 & Symfony2](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/34.jpg)
DependencyInjection (3)
Y el método de transporte se define en el servicio:
Mmmm... ¿Siempre será sendmail?
![Page 35: Drupal8 & Symfony2](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/35.jpg)
DependencyInjection (4)
![Page 36: Drupal8 & Symfony2](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/36.jpg)
DependencyInjection (5)
Y aun es más configurable...
![Page 37: Drupal8 & Symfony2](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/37.jpg)
Conclusiones
![Page 38: Drupal8 & Symfony2](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/38.jpg)
¡ Symfony2 es un gran framework, y sus componentes son realmente buenos !
Conclusión 1
![Page 39: Drupal8 & Symfony2](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/39.jpg)
Con la unión, ambas comunidades ganan enteros
Conclusión 2
![Page 40: Drupal8 & Symfony2](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/40.jpg)
¿Os interesa Drupal?...
...tenéis que incentivar el desarrollo del framework Symfony
Conclusión 3
![Page 41: Drupal8 & Symfony2](https://reader033.fdocumento.com/reader033/viewer/2022052218/5566a139d8b42acd288b4aee/html5/thumbnails/41.jpg)
¡ Muchas gracias !