SlideShare une entreprise Scribd logo
1  sur  41
Télécharger pour lire hors ligne
Sobre el grupo




DrupalCS
@DrupalCS
Sobre mí
●
    Magd Kudama
●
    Programador web
●
    @MagdKudama
●
    http://magdkudama.com
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
¿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 :)
Características Symfony2
●
    Requiere PHP 5.3
●
    Full-stack web framework
●
    (Infinitamente) Flexible
●
    Extensible
●
    Tiene lo mejor de cada casa
La boda: Drupal8 & Symfony2
●
    Symfony basa su funcionamiento en componentes
    altamente desacoplados y genéricos
●
    Drupal integrará algunos componentes Symfony2
Componentes Symfony2
●   HttpKernel
●   HttpFoundation
●   CssSelector
●   ClassLoader
●   Routing
●   EventDispatcher
●   Yaml
●   Validator
●   Security
●   Locale
●   ... Y un laaaaaaaargo etcétera ...
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...
Symfony Components
HttpFoundation
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
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
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
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
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...
HttpFoundation (6) - Response




 Sencillo, ¿verdad? ¡Como tiene que ser!
HttpKernel
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...
ClassLoader
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
ClassLoader (2)
 Cargamos el componente



 Mejoremos la eficiencia: APC
EventDispatcher
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
EventDispatcher (2)




 Recibe tres argumentos: acción a la que escuchar,
 acción a ejecutar, y prioridad
EventDispatcher (3)




 Es posible centralizar los eventos en una clase (mejor
 organización)
Routing
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
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
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)
DependencyInjection
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
DependencyInjection (2)




 Como servicio:




 ¡Poco flexible!
DependencyInjection (3)



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




 Mmmm... ¿Siempre será sendmail?
DependencyInjection (4)
DependencyInjection (5)




 Y aun es más configurable...
Conclusiones
Conclusión 1


¡ Symfony2 es un gran
framework, y sus
componentes son
realmente buenos !
Conclusión 2



Con la unión, ambas
comunidades ganan
enteros
Conclusión 3


¿Os interesa Drupal?...


...tenéis que incentivar el
desarrollo del framework
Symfony
¡ Muchas gracias !

Contenu connexe

Similaire à Drupal8 & Symfony2

Curso: Programación Web con Tecnología Java
Curso:  	Programación Web con Tecnología JavaCurso:  	Programación Web con Tecnología Java
Curso: Programación Web con Tecnología Javaalvaro alcocer sotil
 
5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx
5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx
5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptxSibilinoAndante
 
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...Miguel Ángel Sánchez Chordi
 
FMK Capa de Presentacion
FMK Capa de PresentacionFMK Capa de Presentacion
FMK Capa de Presentacionkaolong
 
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...Corporacion de Industrias Tecnologicas S.A.
 
dockerize.it
dockerize.itdockerize.it
dockerize.itbetabeers
 
Desarrollo modermo de aplicaciones web
Desarrollo modermo de aplicaciones webDesarrollo modermo de aplicaciones web
Desarrollo modermo de aplicaciones webRoberto Sanz Ciriano
 
7-Unidad 2: Diseños de Vista-2.3 Introducción Web Services-Desarrollo Ejemplos
7-Unidad 2: Diseños de Vista-2.3 Introducción Web Services-Desarrollo Ejemplos 7-Unidad 2: Diseños de Vista-2.3 Introducción Web Services-Desarrollo Ejemplos
7-Unidad 2: Diseños de Vista-2.3 Introducción Web Services-Desarrollo Ejemplos Luis Fernando Aguas Bucheli
 
Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...
Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...
Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...Francisco Javier Toscano Lopez
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasCarlos Camacho
 
Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Edgar Dueñas
 

Similaire à Drupal8 & Symfony2 (20)

Curso: Programación Web con Tecnología Java
Curso:  	Programación Web con Tecnología JavaCurso:  	Programación Web con Tecnología Java
Curso: Programación Web con Tecnología Java
 
Semana 7 Servicios Web REST con MongoDB final
Semana 7   Servicios Web REST con MongoDB finalSemana 7   Servicios Web REST con MongoDB final
Semana 7 Servicios Web REST con MongoDB final
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
S4-PD1-2.2 EF
S4-PD1-2.2 EFS4-PD1-2.2 EF
S4-PD1-2.2 EF
 
S4 - EF
S4 - EFS4 - EF
S4 - EF
 
5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx
5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx
5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx
 
S4-PD1.pptx
S4-PD1.pptxS4-PD1.pptx
S4-PD1.pptx
 
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
 
FMK Capa de Presentacion
FMK Capa de PresentacionFMK Capa de Presentacion
FMK Capa de Presentacion
 
¡This is drupal!
¡This is drupal!¡This is drupal!
¡This is drupal!
 
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...
 
Sistemas distribuidos
Sistemas distribuidosSistemas distribuidos
Sistemas distribuidos
 
dockerize.it
dockerize.itdockerize.it
dockerize.it
 
Desarrollo modermo de aplicaciones web
Desarrollo modermo de aplicaciones webDesarrollo modermo de aplicaciones web
Desarrollo modermo de aplicaciones web
 
Semana 7 Servicios Web API REST con Mongodb
Semana 7   Servicios Web API REST con MongodbSemana 7   Servicios Web API REST con Mongodb
Semana 7 Servicios Web API REST con Mongodb
 
7-Unidad 2: Diseños de Vista-2.3 Introducción Web Services-Desarrollo Ejemplos
7-Unidad 2: Diseños de Vista-2.3 Introducción Web Services-Desarrollo Ejemplos 7-Unidad 2: Diseños de Vista-2.3 Introducción Web Services-Desarrollo Ejemplos
7-Unidad 2: Diseños de Vista-2.3 Introducción Web Services-Desarrollo Ejemplos
 
Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...
Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...
Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - Sistemas
 
Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2
 
RMI
RMIRMI
RMI
 

Drupal8 & Symfony2

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