SlideShare una empresa de Scribd logo
1 de 56
Descargar para leer sin conexión
COME SFRUTTARE TUTTE LE POTENZIALITÀ
DI SYMFONY IN DRUPAL 8
LUCA LUSSO
• @lussoluca
• www.linkedin.com/in/lussoluca
• drupal.org/user/138068
• llusso@wellnet.it
Senior Web Developer @Wellnet
#DrupalDaysIT
BENVENUTI
Sviluppatori Drupal7 ?
Sviluppatori Symfony ?
Sviluppatori Drupal8 ?
#DrupalDaysIT
NUOVE API IN DRUPAL8
• Routing
• Configuration management
• Entity
• Plugin
• Views
• Migrate
• Typed Data
• Validation
• …
#DrupalDaysIT
COMPONENTI DI SYMFONY IN DRUPAL8
• Classloader
• Dependency injection
• Event dispatcher
• Http foundation
• Http kernel
• Routing
• Serializer
• Validator
• Yaml
• Twig
#DrupalDaysIT
MODULI CUSTOM
In un modulo custom posso usare:
le nuove API di Drupal8
+
tutte le API messe a disposizione dai
componenti di Symfony
+
#DrupalDaysIT
TALK
In questo talk vedremo un sacco di codice, non
preoccupatevi…
…però partiamo da un caso reale, giusto per non
parlare a vuoto :-)
+
#DrupalDaysIT
PROBLEMA
Identificare il motivo per cui una data pagina è lenta
#DrupalDaysIT
DRUPAL DEVEL
Il modulo Devel ha un logger per query, time e memoria
#DrupalDaysIT
SYMFONY PROFILER
#DrupalDaysIT
SYMFONY PROFILER
E’ presente solo nella Standard Edition di Symfony.
Quindi nel core di Drupal8 non ci sarà…
#DrupalDaysIT
SYMFONY PROFILER
Per poter misurare tutti questi valori il profiler di Symfony è
molto integrato dentro il framework e usa API e concetti
piuttosto specifici
Posso fare una cosa simile per Drupal?
#DrupalDaysIT
WEBPROFILER
Modulo Webprofiler
drupal.org/project/webprofiler
#DrupalDaysIT
WEBPROFILER
Profiler di Symfony per Drupal8!
#DrupalDaysIT
WEBPROFILER
#DrupalDaysIT
WEBPROFILER
#DrupalDaysIT
ATTENZIONE 1
Drupal8 è ancora in versione alpha, gli esempi seguenti
potrebbero non funzionare più!
#DrupalDaysIT
ATTENZIONE 2
Esistono due versioni del modulo webprofiler
!
• 8.x-1.x-alpha11 -> compatibile con la alpha11 del core
• 8.x-dev -> compatibile con l’HEAD corrente del core
#DrupalDaysIT
ESEMPIO
Vedremo come sfruttare questi concetti Symfony in
un modulo Drupal:
!
• Service provider
• Compiler
• Event listener
• Profiler
#DrupalDaysIT
SERVICE PROVIDER
• Symfony utilizza un’architettura a servizi
• I servizi dovrebbero contenere la business logic dell’applicazione,
non i controller!
• Tutti i servizi del core sono definiti nel file core/core.services.yml
• I moduli possono aggiungere nuovi servizi e modificare quelli esistenti
#DrupalDaysIT
SERVIZI DEL CORE
• current_user
• string_translation
• database
• settings
• state
• config.factory
• cache_factory
• form_builder
• http_client
• ~ altri 200 (^(s){2}([a-z_.]*):$ su core.services.yml)
#DrupalDaysIT
SERVIZI
• Implementano una certa funzionalità
• Aumentano la possibilità di riuso del codice
• Rendono un applicazione più testabile
• Possono essere facilmente sostituti
• Vengono caricati solo se servono per gestire una data richiesta
#DrupalDaysIT
SERVIZI
Sono gestiti da un ServiceContainer che in
automatico soddisfa le eventuali dipendenze
attraverso un meccanismo chiamato Dependency
Injection, ossia non è il servizio che carica le proprie
dipendenze da altri servizi ma è il Container che
istanzia le classi necessarie all’atto della creazione
del servizio stesso.
#DrupalDaysIT
SERVIZI
Servizio B (es. Database)
Servizio A (es. Mailer)
Servizio C che dipende da A e B (es. Newsletter)
Se chiedo al Container un’istanza del servizio C,
prima verranno create le istanze dei servizi A e B. Il
container userà poi queste istanze (tipicamente)
come parametri del costruttore di C all’atto della sua
creazione.
#DrupalDaysIT
SERVICE PROVIDER
• Durante il bootstrap Drupal cerca una classe chiamata
nomemoduloServiceProvider e un file nomemodulo.services.yml
all’interno di ciascun modulo attivo
• Il file .yml permette di aggiungere nuovi servizi
• La classe permette di modificare i servizi esistenti o di
aggiungerne di nuovi
• Alla fine del processo di scoperta e modifica dei servizi il
ServiceContainer viene scritto su un file (tipicamente) in sites/
default/files/php (verrà eliminato solo da uno svuotamento
eventuale della cache)
#DrupalDaysIT
WEBPROFILERSERVICEPROVIDER.PHP
#DrupalDaysIT
WEBPROFILER.SERVICES.YML
#DrupalDaysIT
ESEMPIO
• Service provider
• Compiler
• Event listener
• Profiler
#DrupalDaysIT
COMPILER
• Dopo aver aggiunto o alterato i servizi il ServiceContainer viene
“compilato” per ottimizzarlo e per aggiungere ulteriori funzionalità
(parametri e tag)
• Il ServiceContainer passa attraverso una sequenza ordinata di
passi di compilazione. Molti di questi passi sono definiti da
Symfony stesso, alcuni sono nel core di Drupal, i moduli possono
definirne ulteriori
• I passi di compilazione servono per gestire i riferimenti circolari,
rimuovere servizi inutilizzati, trovare servizi con specifici tag, …
#DrupalDaysIT
COMPILER
#DrupalDaysIT
COMPILER PASS
Un passo di compilazione potrebbe ad esempio
cercare tutti i servizi che hanno un certo tag:
ContainerBuilder::findTaggedServiceIds()
#DrupalDaysIT
COMPILER PASS
#DrupalDaysIT
COMPILER PASS
Oppure modificare un servizio esistente, ad
esempio cambiando una delle dipendenze.
Possiamo addirittura modificare completamente
l’implementazione di un servizio (l’importante è che il
nuovo servizio rispetti la stessa interfaccia di quello
sostituito) -> servizi mock per il testing
#DrupalDaysIT
COMPILER PASS
Cambio una dipendenza
Sostituisco un servizio con un altro
#DrupalDaysIT
ESEMPIO
• Service provider
• Compiler
• Event listener
• Profiler
#DrupalDaysIT
EVENT LISTENER
Il componente EventDispatcher di Symfony permette di
definire, sollevare e registrarsi ad eventi:
EventDispatcher::dispatch($eventName, Event $e = null)
EventSubscriberInterface::getSubscribedEvents()
#DrupalDaysIT
EVENT LISTENER
Definisco un servizio all’interno di
nomemodulo.services.yml e gli aggiungo il tag
“event_subscriber”. La classe relativa deve
implementare l’interfaccia EventSubscriberInterface
e definire il metodo getSubscribedEvents(); in
questo metodo registro i listener agli eventi che mi
interessano. Uno dei passi di compilazione si
occuperà di trovare il mio servizio e di registrarlo
all’interno del gestore degli eventi. Se qualcuno
solleva uno degli eventi a cui mi sono registrato
vengo notificato.
#DrupalDaysIT
EVENT LISTENER
#DrupalDaysIT
EVENT LISTENER
#DrupalDaysIT
EVENT LISTENER
• Posso definire i miei eventi e sollevarli in punti precisi
dell’esecuzione di un mio codice
• Sostanzialmente gli eventi potrebbero sostituire il meccanismo
degli hook di Drupal e in effetti posso già usarli all’interno di
moduli custom (probabilmente gli hook spariranno del tutto in
Drupal9, sostituiti dagli eventi)
#DrupalDaysIT
ESEMPIO
• Service provider
• Compiler
• Event listener
• Profiler
#DrupalDaysIT
PROFILER
• Il componente Http kernel contiene un tool per il profiling delle
richieste
• In Symfony Standard Edition il Profiler è definito nel
WebProfilerBundle e usato dal FrameworkBundle (i bundle
sono i moduli di Symfony)
• Usa diversi DataCollectors per memorizzare informazioni su una
specifica richiesta (tempo di esecuzione, memoria, routing, query
al database, …)
• Nell’implementazione di Symfony salva i profili sul filesystem,
usando un token come nome del file
#DrupalDaysIT
PROFILER
L’infrastruttura per la generazione e il salvataggio dei
profili è già tutta nel core di Drupal8, mancherebbero
i pezzi aggiunti dal FrameworkBundle e dal
WebprofilerBundler, però le funzionalità che questi
due bundle usano sono già anch’esse nel core di
Drupal8 (eventi, servizi, tag, …)
#DrupalDaysIT
PROFILER
Ogni singolo collettore di dati è registrato come
servizio e marcato con il tag “data_collector”. La
classe relativa deve estendere la classe
DataCollector e implementare il metodo collect()
#DrupalDaysIT
PROFILER
#DrupalDaysIT
ESEMPIO
• Service provider
• Compiler
• Event listener
• Profiler
#DrupalDaysIT
TOOLS
• PHP 5.4
• GIT
• Drush 7
• PhpStorm EAP (ha il supporto per Drupal8!)
#DrupalDaysIT
APPROFONDIMENTI
La versione 8.x del modulo examples (drupal.org/
project/examples) conterrà a breve molti esempi a
riguardo di questi concetti, potete scaricarne una
preview da qua:
github.com/lussoluca/examples
#DrupalDaysIT
RISORSE
• drupal.org/node/2116747
• drupal.org/node/2133171
• symfony.com/doc/current/components/dependency_injection/index.html
• symfony.com/doc/current/components/event_dispatcher/index.html
• symfony.com/doc/current/cookbook/profiler/index.html
#DrupalDaysIT
CONCLUSIONI
• Drupal8 mette a disposizione innumerevoli nuove API, ma i
componenti di Symfony inclusi nel core ne aggiungono a loro volta
molte altre!
• Molte delle API di Symfony sono esposte da Drupal8 in modo che
i moduli contrib e custom ne possano beneficiare
• I nostri moduli custom possono sfruttare tutte queste potenzialità
per integrarsi sempre di più all’interno del framework
#DrupalDaysIT
CONCLUSIONI
Se vogliamo arrivare pronti all’uscita di Drupal8
potremmo già iniziare a ragionare a “servizi” nei
nostri moduli custom per Drupal7, quello che ci serve
sono un classloader in grado di capire i namespace
di PHP 5.3 e il PSR-0/4 (quello standard di Drupal7
non lo è) e un implementazione di ServiceContainer:
!
• drupal.org/project/xautoload -> PSR-0, PSR-4
• drupal.org/project/pimple_container
Se progettiamo così la business logic della nostra
applicazione, la migrazione di un modulo per
Drupal7 a Drupal8 potrebbe essere meno faticosa
#DrupalDaysIT
Vuoi contribuire a webprofiler? Contattaci!
Abbiamo bisogno di codice, grafica, documentazione, idee
drupal.org/project/webprofiler
#DrupalDaysIT
DOMANDE?
#DrupalDaysIT
GRAZIE ;-)
#DrupalDaysIT
TITOLO DIAPOSITIVA
Corpo della diapositiva
SPONSOR
MEDIA PARTNER

Más contenido relacionado

La actualidad más candente

La actualidad más candente (7)

Portlet JSR168/286
Portlet JSR168/286Portlet JSR168/286
Portlet JSR168/286
 
Lezione 10: Web Service in Java (2)
Lezione 10: Web Service in Java (2)Lezione 10: Web Service in Java (2)
Lezione 10: Web Service in Java (2)
 
Come portare il profiler di symfony2 in drupal8
Come portare il profiler di symfony2 in drupal8Come portare il profiler di symfony2 in drupal8
Come portare il profiler di symfony2 in drupal8
 
Ddive Xpage852
Ddive Xpage852Ddive Xpage852
Ddive Xpage852
 
Lezione 6: Remote Method Invocation
Lezione 6: Remote Method InvocationLezione 6: Remote Method Invocation
Lezione 6: Remote Method Invocation
 
Corso angular js componenti
Corso angular js componentiCorso angular js componenti
Corso angular js componenti
 
Lezione 7: Remote Method Invocation e SSL
Lezione 7: Remote Method Invocation e SSLLezione 7: Remote Method Invocation e SSL
Lezione 7: Remote Method Invocation e SSL
 

Similar a Come sfruttare tutte le potenzialità di Symfony in Drupal 8

Simple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computingSimple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computingFrancesca1980
 
Azure dayroma java, il lato oscuro del cloud
Azure dayroma   java, il lato oscuro del cloudAzure dayroma   java, il lato oscuro del cloud
Azure dayroma java, il lato oscuro del cloudRiccardo Zamana
 
Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Codemotion
 
Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANODrupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANODrupalDay
 
Smau milano 2012 massimiliano del cero
Smau milano 2012 massimiliano del ceroSmau milano 2012 massimiliano del cero
Smau milano 2012 massimiliano del ceroSMAU
 
Applicazioni Serverless con AWS
Applicazioni Serverless con AWSApplicazioni Serverless con AWS
Applicazioni Serverless con AWSsparkfabrik
 
Liferay: Esporre Web Services Custom
Liferay: Esporre Web Services CustomLiferay: Esporre Web Services Custom
Liferay: Esporre Web Services CustomAntonio Musarra
 
DbUp - A real case of database migration
DbUp - A real case of database migrationDbUp - A real case of database migration
DbUp - A real case of database migrationAndrea Cirioni
 
MySQL Day Roma 2019 - Le architetture a microservizi e MySQL
MySQL Day Roma 2019 - Le architetture a microservizi e MySQLMySQL Day Roma 2019 - Le architetture a microservizi e MySQL
MySQL Day Roma 2019 - Le architetture a microservizi e MySQLPar-Tec S.p.A.
 
Introduzione a TypeScript
Introduzione a TypeScriptIntroduzione a TypeScript
Introduzione a TypeScriptSinergia Totale
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptSinergia Totale
 
Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0Alessandro Forte
 
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLDTYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLDDotNetCampus
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campusDotNetCampus
 
Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)Fabio Armani
 
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Whymca
 
SVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDSVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDLuca Masini
 
[Laravel Day 2022] Deploy di Laravel su AWS Lambda (from Zero to Hero).pdf
[Laravel Day 2022] Deploy di Laravel su AWS Lambda (from Zero to Hero).pdf[Laravel Day 2022] Deploy di Laravel su AWS Lambda (from Zero to Hero).pdf
[Laravel Day 2022] Deploy di Laravel su AWS Lambda (from Zero to Hero).pdfFrancesco Liuzzi
 

Similar a Come sfruttare tutte le potenzialità di Symfony in Drupal 8 (20)

#dd12 Applicazioni a tre voci (Android e Domino)
#dd12 Applicazioni a tre voci (Android e Domino)#dd12 Applicazioni a tre voci (Android e Domino)
#dd12 Applicazioni a tre voci (Android e Domino)
 
Simple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computingSimple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computing
 
Azure dayroma java, il lato oscuro del cloud
Azure dayroma   java, il lato oscuro del cloudAzure dayroma   java, il lato oscuro del cloud
Azure dayroma java, il lato oscuro del cloud
 
Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015
 
Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANODrupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANO
 
Smau milano 2012 massimiliano del cero
Smau milano 2012 massimiliano del ceroSmau milano 2012 massimiliano del cero
Smau milano 2012 massimiliano del cero
 
Applicazioni Serverless con AWS
Applicazioni Serverless con AWSApplicazioni Serverless con AWS
Applicazioni Serverless con AWS
 
Liferay: Esporre Web Services Custom
Liferay: Esporre Web Services CustomLiferay: Esporre Web Services Custom
Liferay: Esporre Web Services Custom
 
DbUp - A real case of database migration
DbUp - A real case of database migrationDbUp - A real case of database migration
DbUp - A real case of database migration
 
MySQL Day Roma 2019 - Le architetture a microservizi e MySQL
MySQL Day Roma 2019 - Le architetture a microservizi e MySQLMySQL Day Roma 2019 - Le architetture a microservizi e MySQL
MySQL Day Roma 2019 - Le architetture a microservizi e MySQL
 
Introduzione a TypeScript
Introduzione a TypeScriptIntroduzione a TypeScript
Introduzione a TypeScript
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScript
 
Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0
 
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLDTYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campus
 
Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)
 
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini
 
SVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDSVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROID
 
Azure functions
Azure functionsAzure functions
Azure functions
 
[Laravel Day 2022] Deploy di Laravel su AWS Lambda (from Zero to Hero).pdf
[Laravel Day 2022] Deploy di Laravel su AWS Lambda (from Zero to Hero).pdf[Laravel Day 2022] Deploy di Laravel su AWS Lambda (from Zero to Hero).pdf
[Laravel Day 2022] Deploy di Laravel su AWS Lambda (from Zero to Hero).pdf
 

Más de Eugenio Minardi

Delphi and ExtJS (26 ottobre 2017)
Delphi and ExtJS (26 ottobre 2017)Delphi and ExtJS (26 ottobre 2017)
Delphi and ExtJS (26 ottobre 2017)Eugenio Minardi
 
ExtJS: La piattaforma vincente (tools)
ExtJS: La piattaforma vincente (tools)ExtJS: La piattaforma vincente (tools)
ExtJS: La piattaforma vincente (tools)Eugenio Minardi
 
ExtJS: La piattaforma vincente (multiple screens)
ExtJS: La piattaforma vincente (multiple screens)ExtJS: La piattaforma vincente (multiple screens)
ExtJS: La piattaforma vincente (multiple screens)Eugenio Minardi
 
ExtJS: La piattaforma vincente (rich UI)
ExtJS: La piattaforma vincente (rich UI)ExtJS: La piattaforma vincente (rich UI)
ExtJS: La piattaforma vincente (rich UI)Eugenio Minardi
 
ExtJS: La piattaforma vincente (class system)
ExtJS: La piattaforma vincente (class system)ExtJS: La piattaforma vincente (class system)
ExtJS: La piattaforma vincente (class system)Eugenio Minardi
 
ExtJS: La piattaforma vincente
ExtJS: La piattaforma vincenteExtJS: La piattaforma vincente
ExtJS: La piattaforma vincenteEugenio Minardi
 
Distributed Team Management: 
Pitfall, Challenges and Advantages
Distributed Team Management: 
Pitfall, Challenges and AdvantagesDistributed Team Management: 
Pitfall, Challenges and Advantages
Distributed Team Management: 
Pitfall, Challenges and AdvantagesEugenio Minardi
 
A Practical Introduction to Symfony (European Drupal Days 2015)
A Practical Introduction to Symfony (European Drupal Days 2015)A Practical Introduction to Symfony (European Drupal Days 2015)
A Practical Introduction to Symfony (European Drupal Days 2015)Eugenio Minardi
 
UN World Food Programme Standards & Best Practises (European Drupal Days 2015)
UN World Food Programme Standards & Best Practises (European Drupal Days 2015)UN World Food Programme Standards & Best Practises (European Drupal Days 2015)
UN World Food Programme Standards & Best Practises (European Drupal Days 2015)Eugenio Minardi
 
Drupal theming - a practical approach (European Drupal Days 2015)
Drupal theming - a practical approach (European Drupal Days 2015)Drupal theming - a practical approach (European Drupal Days 2015)
Drupal theming - a practical approach (European Drupal Days 2015)Eugenio Minardi
 
Optimizing MariaDB for Web Applications (European Drupal Days 2015)
Optimizing MariaDB for Web Applications (European Drupal Days 2015)Optimizing MariaDB for Web Applications (European Drupal Days 2015)
Optimizing MariaDB for Web Applications (European Drupal Days 2015)Eugenio Minardi
 
PhpStorm for Drupal Development (European Drupal Days 2015)
PhpStorm for Drupal Development (European Drupal Days 2015)PhpStorm for Drupal Development (European Drupal Days 2015)
PhpStorm for Drupal Development (European Drupal Days 2015)Eugenio Minardi
 
Drupal Continuous Integration (European Drupal Days 2015)
Drupal Continuous Integration (European Drupal Days 2015)Drupal Continuous Integration (European Drupal Days 2015)
Drupal Continuous Integration (European Drupal Days 2015)Eugenio Minardi
 
Deploying an Open Source DAM in SAAS Mode (European Drupal Days 2015)
Deploying an Open Source DAM in SAAS Mode (European Drupal Days 2015)Deploying an Open Source DAM in SAAS Mode (European Drupal Days 2015)
Deploying an Open Source DAM in SAAS Mode (European Drupal Days 2015)Eugenio Minardi
 
The multilingual Drupal 8 experience (European Drupal Days 2015)
The multilingual Drupal 8 experience (European Drupal Days 2015)The multilingual Drupal 8 experience (European Drupal Days 2015)
The multilingual Drupal 8 experience (European Drupal Days 2015)Eugenio Minardi
 
Another Copernican Revolution: maintenance first, projects second (European D...
Another Copernican Revolution: maintenance first, projects second (European D...Another Copernican Revolution: maintenance first, projects second (European D...
Another Copernican Revolution: maintenance first, projects second (European D...Eugenio Minardi
 
Drupal Security: How to survive Drupalgeddon and prepare for future (European...
Drupal Security: How to survive Drupalgeddon and prepare for future (European...Drupal Security: How to survive Drupalgeddon and prepare for future (European...
Drupal Security: How to survive Drupalgeddon and prepare for future (European...Eugenio Minardi
 
The benefits of an elastic infrastructure on a Drupal e-commerce (European Dr...
The benefits of an elastic infrastructure on a Drupal e-commerce (European Dr...The benefits of an elastic infrastructure on a Drupal e-commerce (European Dr...
The benefits of an elastic infrastructure on a Drupal e-commerce (European Dr...Eugenio Minardi
 
Verifying Drupal modules with OWASP ASVS 2014 (European Drupal Days 2015)
Verifying Drupal modules with OWASP ASVS 2014 (European Drupal Days 2015)Verifying Drupal modules with OWASP ASVS 2014 (European Drupal Days 2015)
Verifying Drupal modules with OWASP ASVS 2014 (European Drupal Days 2015)Eugenio Minardi
 
Secure Drupal, from start to finish (European Drupal Days 2015)
Secure Drupal, from start to finish (European Drupal Days 2015)Secure Drupal, from start to finish (European Drupal Days 2015)
Secure Drupal, from start to finish (European Drupal Days 2015)Eugenio Minardi
 

Más de Eugenio Minardi (20)

Delphi and ExtJS (26 ottobre 2017)
Delphi and ExtJS (26 ottobre 2017)Delphi and ExtJS (26 ottobre 2017)
Delphi and ExtJS (26 ottobre 2017)
 
ExtJS: La piattaforma vincente (tools)
ExtJS: La piattaforma vincente (tools)ExtJS: La piattaforma vincente (tools)
ExtJS: La piattaforma vincente (tools)
 
ExtJS: La piattaforma vincente (multiple screens)
ExtJS: La piattaforma vincente (multiple screens)ExtJS: La piattaforma vincente (multiple screens)
ExtJS: La piattaforma vincente (multiple screens)
 
ExtJS: La piattaforma vincente (rich UI)
ExtJS: La piattaforma vincente (rich UI)ExtJS: La piattaforma vincente (rich UI)
ExtJS: La piattaforma vincente (rich UI)
 
ExtJS: La piattaforma vincente (class system)
ExtJS: La piattaforma vincente (class system)ExtJS: La piattaforma vincente (class system)
ExtJS: La piattaforma vincente (class system)
 
ExtJS: La piattaforma vincente
ExtJS: La piattaforma vincenteExtJS: La piattaforma vincente
ExtJS: La piattaforma vincente
 
Distributed Team Management: 
Pitfall, Challenges and Advantages
Distributed Team Management: 
Pitfall, Challenges and AdvantagesDistributed Team Management: 
Pitfall, Challenges and Advantages
Distributed Team Management: 
Pitfall, Challenges and Advantages
 
A Practical Introduction to Symfony (European Drupal Days 2015)
A Practical Introduction to Symfony (European Drupal Days 2015)A Practical Introduction to Symfony (European Drupal Days 2015)
A Practical Introduction to Symfony (European Drupal Days 2015)
 
UN World Food Programme Standards & Best Practises (European Drupal Days 2015)
UN World Food Programme Standards & Best Practises (European Drupal Days 2015)UN World Food Programme Standards & Best Practises (European Drupal Days 2015)
UN World Food Programme Standards & Best Practises (European Drupal Days 2015)
 
Drupal theming - a practical approach (European Drupal Days 2015)
Drupal theming - a practical approach (European Drupal Days 2015)Drupal theming - a practical approach (European Drupal Days 2015)
Drupal theming - a practical approach (European Drupal Days 2015)
 
Optimizing MariaDB for Web Applications (European Drupal Days 2015)
Optimizing MariaDB for Web Applications (European Drupal Days 2015)Optimizing MariaDB for Web Applications (European Drupal Days 2015)
Optimizing MariaDB for Web Applications (European Drupal Days 2015)
 
PhpStorm for Drupal Development (European Drupal Days 2015)
PhpStorm for Drupal Development (European Drupal Days 2015)PhpStorm for Drupal Development (European Drupal Days 2015)
PhpStorm for Drupal Development (European Drupal Days 2015)
 
Drupal Continuous Integration (European Drupal Days 2015)
Drupal Continuous Integration (European Drupal Days 2015)Drupal Continuous Integration (European Drupal Days 2015)
Drupal Continuous Integration (European Drupal Days 2015)
 
Deploying an Open Source DAM in SAAS Mode (European Drupal Days 2015)
Deploying an Open Source DAM in SAAS Mode (European Drupal Days 2015)Deploying an Open Source DAM in SAAS Mode (European Drupal Days 2015)
Deploying an Open Source DAM in SAAS Mode (European Drupal Days 2015)
 
The multilingual Drupal 8 experience (European Drupal Days 2015)
The multilingual Drupal 8 experience (European Drupal Days 2015)The multilingual Drupal 8 experience (European Drupal Days 2015)
The multilingual Drupal 8 experience (European Drupal Days 2015)
 
Another Copernican Revolution: maintenance first, projects second (European D...
Another Copernican Revolution: maintenance first, projects second (European D...Another Copernican Revolution: maintenance first, projects second (European D...
Another Copernican Revolution: maintenance first, projects second (European D...
 
Drupal Security: How to survive Drupalgeddon and prepare for future (European...
Drupal Security: How to survive Drupalgeddon and prepare for future (European...Drupal Security: How to survive Drupalgeddon and prepare for future (European...
Drupal Security: How to survive Drupalgeddon and prepare for future (European...
 
The benefits of an elastic infrastructure on a Drupal e-commerce (European Dr...
The benefits of an elastic infrastructure on a Drupal e-commerce (European Dr...The benefits of an elastic infrastructure on a Drupal e-commerce (European Dr...
The benefits of an elastic infrastructure on a Drupal e-commerce (European Dr...
 
Verifying Drupal modules with OWASP ASVS 2014 (European Drupal Days 2015)
Verifying Drupal modules with OWASP ASVS 2014 (European Drupal Days 2015)Verifying Drupal modules with OWASP ASVS 2014 (European Drupal Days 2015)
Verifying Drupal modules with OWASP ASVS 2014 (European Drupal Days 2015)
 
Secure Drupal, from start to finish (European Drupal Days 2015)
Secure Drupal, from start to finish (European Drupal Days 2015)Secure Drupal, from start to finish (European Drupal Days 2015)
Secure Drupal, from start to finish (European Drupal Days 2015)
 

Come sfruttare tutte le potenzialità di Symfony in Drupal 8