SlideShare a Scribd company logo
1 of 30
Managing Configuration in Drupal 8
Raffaele Chiocca
Technical Architect @Kelyon
1
Managing Configuration in Drupal 8
Drupal 8 dispone di un sistema totalmente nuovo
per memorizzare la configurazione in maniera
uniforme e affidabile.
Tutta la configurazione di Drupal 8 , dai moduli
abilitati ai fields sono memorizzati utilizzando
questo sistema.
Questa funzionalità rimpiazza la necessità del
modulo contrib Features che in Drupal 8 ritornerà
al suo scopo originario.
2
Code-Driven Configuration in Drupal
• In Drupal la configurazione e i contenuti sono sempre stati memorizzati
nello stesso database, ogni volta che si effettuava una modifica
dall’interfaccia di amministrazione la modifica non veniva tracciata.
• Drupal 6 : Prima Versione di Features con la possibilità di esportare la
configurazione in codice PHP.
• Drupal 7 : Il supporto a Features è maturo, ma non tutti i componenti
sono esportabili, inoltre deve utilizzare moduli di terze parti per coprire i
diversi use-cases.
• Drupal 8 : Il core è stato progettato per gestire la configurazione in
maniera“Code-Driven”. Configurazione e contenuti vengono gestiti in
maniera separata, la configurazione è gestita tramite un sistema text-
based.
21/06/20153
Approccio Drupal 6-7 (core)
• Default in Drupal 6 e Drupal 7 (core) – Database Driven
• Approccio standard, al click Drupal salva la
configurazione nel database e dimentica.
• Svantaggi : configurazioni e contenuti vengono
mischiati.
• Svantaggi : Per effettuare il deployment in un ambiente
di produzione è necessario eseguire step-by-step tutte
le configurazioni.
• Svantaggi : I cambiamenti alle configurazioni non
vengono tracciati.
21/06/20154
Approccio Drupal 7 + Features
• Per consentire l’export delle funzionalità è necessario
renderle “esportabili”.
• La problematica situazione degli “Overridden”.
• Non tutto è esportabile tramite features.
• Per esportare la configurazione con Features è
necessario inserire gli elementi in una “lista” e non si ha
mai il controllo completo dell’ambiente.
• Features è perfetto per il packaging delle funzionalità
ma non per l’esportazione delle funzionalità, non è
possibile esportare delle configurazioni senza prima
effettuarne il packaging.
21/06/20155
Qual è il problema da risolvere? (1/2)
21/06/20156
Qual è il problema da risolvere? (2/2)
21/06/20157
La soluzione implementata in Drupal 8
• La configurazione è gestita tramite un sistema “text-driven”
• Tutti i files di configurazione rispettano le specifiche YAML
(Yet Another Markup Language)
• Le configurazioni “active” e “staging” sono separate.
• La configurazione “Active” viene memorizzata nel database
(configurazione di default).
• è possibile cambiare i settaggi dei configuration repositories
“Active” e “Staging” nel settings.php
21/06/20158
Formato dei files di configurazione
YAML
• Dichiarativo
• Parsato
• Si trova in cartelle specifiche
chiamate “config”
• è trattato in maniera
differente.
21/06/20159
PHP
• Imperativo
• Interpretato
• Può trovarsi nella stessa
cartella del modulo
• è trattato a tutti gli effetti
come un modulo
Anatomia di un Drupal 8 configuration
file (1/2)
• Dal modulo system del core di Drupal 8
filename : system.site.yml
21/06/201510
Anatomia di un Drupal 8 configuration
file (2/2)
system.site.yml
• uuid: 'd54e0656-a8af-4181-b116-22a304ff3caa'
• name: 'SIDCAMP 2015'
• mail: 'raffaele.chiocca@kelyon.it'
• slogan: ‘sidcamp'
• page:
• 403: ’access-denied'
• 404: ’not-found'
• front: user/login
• admin_compact_mode: false
• weight_select_max: 100
• langcode: en
• default_langcode: en
21/06/201511
Configuration API
@see DrupalCoreConfigConfig
MAIN ENTRY POINT : Drupal::config()
DrupalCoreConfigConfigFactory (SET/SAVE)
DrupalCoreConfigImmutableConfig (GET)
DrupalCoreFormConfigFormBaseTrait (fornisce ai
form una modalità di accesso alla configurazione
DrupalCoreFormConfigFormBase)
21/06/201512
Accesso ai dati
21/06/201513
Config API (1/4)
21/06/201514
$site_name = Drupal::config('system.site')->get('name');
-----------------------------------------------------------------------------
uuid: 'd54e0656-a8af-4181-b116-22a304ff3caa’
name : 'SIDCAMP 2015'
mail: 'raffaele.chiocca@kelyon.it'
slogan: ‘sidcamp'
page:
403: ’access-denied'
404: ’not-found'
front: user/login
admin_compact_mode: false
weight_select_max: 100
langcode: en
default_langcode: en
Config API (2/4)
21/06/201515
$page_data = Drupal::config(‘system.site’)->get(‘page’);
-----------------------------------------------------------------------------
uuid: 'd54e0656-a8af-4181-b116-22a304ff3caa’
name : 'SIDCAMP 2015'
mail: 'raffaele.chiocca@kelyon.it'
slogan: ‘sidcamp'
page:
403 : ’access-denied'
404 : ’not-found'
front : user/login
admin_compact_mode: false
weight_select_max: 100
langcode: en
default_langcode: en
Config API (3/4)
21/06/201516
$front_page = Drupal::config(‘system.site’)->get(‘page.front’);
-----------------------------------------------------------------------------
uuid: 'd54e0656-a8af-4181-b116-22a304ff3caa’
name : 'SIDCAMP 2015'
mail: 'raffaele.chiocca@kelyon.it'
slogan: ‘sidcamp'
page:
403 : ’access-denied'
404 : ’not-found'
front : user/login
admin_compact_mode: false
weight_select_max: 100
langcode: en
default_langcode: en
Config API (4/4)
21/06/201517
$site_config = Drupal::config(‘system.site’)->get();
-----------------------------------------------------------------------------
uuid: 'd54e0656-a8af-4181-b116-22a304ff3caa’
name: 'SIDCAMP 2015'
mail: 'raffaele.chiocca@kelyon.it’
slogan: ‘sidcamp’
page:
403 : ’access-denied'
404 : ’not-found'
front : user/login
admin_compact_mode: false
weight_select_max: 100
langcode: en
default_langcode: en
Salvataggio della configurazione
21/06/201518
21/06/201519
Salvataggio della configurazione
21/06/201520
Istanzia un config object per ogni configuration object name (‘system.site’) che riceve.
Drupal::configFactory()->getEditable('system.site')
->set('name', "SIDCAMP AND PIZZA")
->save();
----------------------------------------------------------------------------------------------------------------------
uuid: 'd54e0656-a8af-4181-b116-22a304ff3caa’
name: 'SIDCAMP AND PIZZA'
mail: 'raffaele.chiocca@kelyon.it’
slogan: ‘sidcamp’
page:
403 : ’access-denied'
404 : ’not-found'
front : node
Drupal 8 State API
La variabile ha senso solo per l’ambiente attuale ?
Esempi :
L’ultima volta in cui sono stati controllati gli aggiornamenti di Drupal
$last_cron_run
In questo caso va utilizzata la State API di Drupal 8.
L’entry point a questa API è Drupal::state() e restituisce un oggetto di tipo
DrupalCoreStateStateInterface
Esecuzione del cron di Drupal:
$last_cron_run = Drupal::state()->get(‘system.cron_last’);
Drupal::state()->set(‘system.cron_last’, REQUEST_TIME);
21/06/201521
Deployment Steps (1/2)
21/06/201522
Deployment Steps (2/2)
21/06/201523
Configuration Schema (1/2)
21/06/201524
system.maintenance.yml
-----------------------------------------------------------------------------
enabled: 0
Message : ‘@site is currently under maintenance. We should be back
shortly. Thank you for your patience.’
Configuration Schema (2/2)
21/06/201525
system.maintenance.yml
-----------------------------------------------------------------------------
System.maintenance:
type : mapping
label : “Maintenance mode”
mapping :
“enabled”:
type : boolean
label : “Put site into maintenance mode”
“message” :
type : text
label : “Message to display when in maintenance mode”
Configuration Overrides
21/06/201526
Override di una configurazione
21/06/201527
• system.maintenance.yml
Sovrascrivere globalmente il messaggio mostrato in
modalità di manutenzione.
---------------------------------------------------------------------
Global $conf ;
$conf[‘system.maintenance’][‘message’] = ‘Sorry,
SIDCAMP is down now’;
Evitare i config overrides
21/06/201528
system.maintenance.yml
Ottenere il messaggio di manutenzione “originale” prima del nostro override.
-----------------------------------------------------------------------------
OTTIENI IL MESSAGGIO CON GLI OVERRIDES -> (‘SIDCAMP IS DOWN NOW’)
$maintenance_message = Drupal::config('system.maintenance')->get(’message');
OTTIENI IL MESSAGGIO SENZA GLI OVERRIDES -> (‘@site is currently under maintenance….)
$maintenance_message_editable = Drupal::configFactory()-
>getEditable('system.maintenance')->get('message');
Effettuare overrides da un modulo
custom (1/2)
21/06/201529
services:
config_example.overrider:
class: Drupalconfig_exampleConfigExampleOverrides
tags:
- {name: config.factory.override, priority: 5}
@see
Un esempio rilevante da vedere in questo caso è la seguente interfaccia
interface LanguageConfigFactoryOverrideInterface
(modulo language del core di drupal)
config_example.service.yml
21/06/201530
ConfigExampleOverrides.php
/**
* @file
* Contains Drupalconfig_exampleConfigExampleOverrides.
*/
namespace Drupalconfig_example;
use DrupalCoreConfigConfigFactoryOverrideInterface;
/**
* Example configuration override.
*/
class ConfigModuleOverrides implements ConfigFactoryOverrideInterface {
public function loadOverrides($names) {
$overrides = array();
if (in_array('system.site', $names)) {
$overrides['system.site'] = ['name' => ’SIDCAMP overriden site name!'];
}
return $overrides;
}
}
Effettuare overrides da un modulo
custom (2/2)

More Related Content

What's hot

Mettere in sicurezza ambienti sql server
Mettere in sicurezza ambienti sql serverMettere in sicurezza ambienti sql server
Mettere in sicurezza ambienti sql serverGianluca Hotz
 
Azure SQL Database Ledger
Azure SQL Database LedgerAzure SQL Database Ledger
Azure SQL Database LedgerGianluca Hotz
 
Le Applicazioni di Internet Web, FTP, Posta e App pr il Mobile
Le Applicazioni di Internet Web, FTP, Posta e App pr il MobileLe Applicazioni di Internet Web, FTP, Posta e App pr il Mobile
Le Applicazioni di Internet Web, FTP, Posta e App pr il MobileI.S.I.S. "Antonio Serra" - Napoli
 
Corso Avanzato Alfresco Ecm
Corso Avanzato Alfresco EcmCorso Avanzato Alfresco Ecm
Corso Avanzato Alfresco Ecmedoardo fraioli
 
Php concetti chiave di base
Php concetti chiave di basePhp concetti chiave di base
Php concetti chiave di baseWalter Liguori
 
Il cielo è sempre più azure
Il cielo è sempre più azureIl cielo è sempre più azure
Il cielo è sempre più azureKlab
 
Un ILS open source per l'automazione delle biblioteche. L'ipotesi Koha a Ca' ...
Un ILS open source per l'automazione delle biblioteche. L'ipotesi Koha a Ca' ...Un ILS open source per l'automazione delle biblioteche. L'ipotesi Koha a Ca' ...
Un ILS open source per l'automazione delle biblioteche. L'ipotesi Koha a Ca' ...Giulio Bonanome
 
Sql start!2019 Migliorare la produttività per lo sviluppo su SQL Server
Sql start!2019 Migliorare la produttività per lo sviluppo su SQL ServerSql start!2019 Migliorare la produttività per lo sviluppo su SQL Server
Sql start!2019 Migliorare la produttività per lo sviluppo su SQL ServerAlessandro Alpi
 
SQL Server Data Virtualization with Polybase
SQL Server Data Virtualization with PolybaseSQL Server Data Virtualization with Polybase
SQL Server Data Virtualization with PolybaseGianluca Hotz
 
Introduzione ad iDashboards 9.0
Introduzione ad iDashboards 9.0Introduzione ad iDashboards 9.0
Introduzione ad iDashboards 9.0Sergio Sardo
 

What's hot (11)

Mettere in sicurezza ambienti sql server
Mettere in sicurezza ambienti sql serverMettere in sicurezza ambienti sql server
Mettere in sicurezza ambienti sql server
 
Azure SQL Database Ledger
Azure SQL Database LedgerAzure SQL Database Ledger
Azure SQL Database Ledger
 
Le Applicazioni di Internet Web, FTP, Posta e App pr il Mobile
Le Applicazioni di Internet Web, FTP, Posta e App pr il MobileLe Applicazioni di Internet Web, FTP, Posta e App pr il Mobile
Le Applicazioni di Internet Web, FTP, Posta e App pr il Mobile
 
Le novità di Domino 8.5 - lato Admin
Le novità di Domino 8.5 - lato AdminLe novità di Domino 8.5 - lato Admin
Le novità di Domino 8.5 - lato Admin
 
Corso Avanzato Alfresco Ecm
Corso Avanzato Alfresco EcmCorso Avanzato Alfresco Ecm
Corso Avanzato Alfresco Ecm
 
Php concetti chiave di base
Php concetti chiave di basePhp concetti chiave di base
Php concetti chiave di base
 
Il cielo è sempre più azure
Il cielo è sempre più azureIl cielo è sempre più azure
Il cielo è sempre più azure
 
Un ILS open source per l'automazione delle biblioteche. L'ipotesi Koha a Ca' ...
Un ILS open source per l'automazione delle biblioteche. L'ipotesi Koha a Ca' ...Un ILS open source per l'automazione delle biblioteche. L'ipotesi Koha a Ca' ...
Un ILS open source per l'automazione delle biblioteche. L'ipotesi Koha a Ca' ...
 
Sql start!2019 Migliorare la produttività per lo sviluppo su SQL Server
Sql start!2019 Migliorare la produttività per lo sviluppo su SQL ServerSql start!2019 Migliorare la produttività per lo sviluppo su SQL Server
Sql start!2019 Migliorare la produttività per lo sviluppo su SQL Server
 
SQL Server Data Virtualization with Polybase
SQL Server Data Virtualization with PolybaseSQL Server Data Virtualization with Polybase
SQL Server Data Virtualization with Polybase
 
Introduzione ad iDashboards 9.0
Introduzione ad iDashboards 9.0Introduzione ad iDashboards 9.0
Introduzione ad iDashboards 9.0
 

Similar to Managing configuration in Drupal 8 - SIDCamp 2015

Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...DrupalDay
 
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8bmeme
 
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8DrupalDay
 
Drupal Day 2015 - Drupal 8 dal download del core alla pubblicazione in prod...
Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in prod...Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in prod...
Drupal Day 2015 - Drupal 8 dal download del core alla pubblicazione in prod...Vincenzo Di Biaggio
 
Drupal - per chi vuole iniziare
Drupal - per chi vuole iniziareDrupal - per chi vuole iniziare
Drupal - per chi vuole iniziareSalvatore Paone
 
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 drupal8Luca Lusso
 
Drupal
DrupalDrupal
DrupalNaLUG
 
DDAY2014 - Performance in Drupal 8
DDAY2014 - Performance in Drupal 8DDAY2014 - Performance in Drupal 8
DDAY2014 - Performance in Drupal 8DrupalDay
 
[drupalday2017] - Async navigation with a lightweight ES6 framework
[drupalday2017] - Async navigation with a lightweight ES6 framework[drupalday2017] - Async navigation with a lightweight ES6 framework
[drupalday2017] - Async navigation with a lightweight ES6 frameworkDrupalDay
 
Async navigation with a lightweight ES6 framework
Async navigation with a lightweight ES6 frameworkAsync navigation with a lightweight ES6 framework
Async navigation with a lightweight ES6 frameworksparkfabrik
 
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDB
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDBPolyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDB
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDBSteve Maraspin
 
Drupal 7 : theming avanzato
Drupal 7 : theming avanzatoDrupal 7 : theming avanzato
Drupal 7 : theming avanzatoTwinbit
 
Presentazione django reminiscence
Presentazione django reminiscencePresentazione django reminiscence
Presentazione django reminiscenceAndrea Gottardi
 
Smau milano 2012 massimiliano del cero
Smau milano 2012 massimiliano del ceroSmau milano 2012 massimiliano del cero
Smau milano 2012 massimiliano del ceroSMAU
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptSinergia Totale
 
Wss Solution Framework
Wss Solution FrameworkWss Solution Framework
Wss Solution Frameworkmakkros
 
Wi-Cobol: modernizzazione programmi scritti in COBOL per IBM i/AS400/iSeries/...
Wi-Cobol: modernizzazione programmi scritti in COBOL per IBM i/AS400/iSeries/...Wi-Cobol: modernizzazione programmi scritti in COBOL per IBM i/AS400/iSeries/...
Wi-Cobol: modernizzazione programmi scritti in COBOL per IBM i/AS400/iSeries/...Faq400 - la Community IBM i italiana
 
Creare un tema personalizzato per wordpress
Creare un tema personalizzato per wordpressCreare un tema personalizzato per wordpress
Creare un tema personalizzato per wordpressGGDBologna
 

Similar to Managing configuration in Drupal 8 - SIDCamp 2015 (20)

Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
 
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
 
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
 
Drupal Day 2015 - Drupal 8 dal download del core alla pubblicazione in prod...
Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in prod...Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in prod...
Drupal Day 2015 - Drupal 8 dal download del core alla pubblicazione in prod...
 
Drupal - per chi vuole iniziare
Drupal - per chi vuole iniziareDrupal - per chi vuole iniziare
Drupal - per chi vuole iniziare
 
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
 
Drupal
DrupalDrupal
Drupal
 
DDAY2014 - Performance in Drupal 8
DDAY2014 - Performance in Drupal 8DDAY2014 - Performance in Drupal 8
DDAY2014 - Performance in Drupal 8
 
[drupalday2017] - Async navigation with a lightweight ES6 framework
[drupalday2017] - Async navigation with a lightweight ES6 framework[drupalday2017] - Async navigation with a lightweight ES6 framework
[drupalday2017] - Async navigation with a lightweight ES6 framework
 
Async navigation with a lightweight ES6 framework
Async navigation with a lightweight ES6 frameworkAsync navigation with a lightweight ES6 framework
Async navigation with a lightweight ES6 framework
 
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDB
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDBPolyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDB
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDB
 
Drupal 7 : theming avanzato
Drupal 7 : theming avanzatoDrupal 7 : theming avanzato
Drupal 7 : theming avanzato
 
Presentazione django reminiscence
Presentazione django reminiscencePresentazione django reminiscence
Presentazione django reminiscence
 
Smau milano 2012 massimiliano del cero
Smau milano 2012 massimiliano del ceroSmau milano 2012 massimiliano del cero
Smau milano 2012 massimiliano del cero
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScript
 
Presentazione novità Domino 8.5
Presentazione novità Domino 8.5Presentazione novità Domino 8.5
Presentazione novità Domino 8.5
 
Wss Solution Framework
Wss Solution FrameworkWss Solution Framework
Wss Solution Framework
 
Novita TYPO3 CMS 7.2
Novita TYPO3 CMS 7.2Novita TYPO3 CMS 7.2
Novita TYPO3 CMS 7.2
 
Wi-Cobol: modernizzazione programmi scritti in COBOL per IBM i/AS400/iSeries/...
Wi-Cobol: modernizzazione programmi scritti in COBOL per IBM i/AS400/iSeries/...Wi-Cobol: modernizzazione programmi scritti in COBOL per IBM i/AS400/iSeries/...
Wi-Cobol: modernizzazione programmi scritti in COBOL per IBM i/AS400/iSeries/...
 
Creare un tema personalizzato per wordpress
Creare un tema personalizzato per wordpressCreare un tema personalizzato per wordpress
Creare un tema personalizzato per wordpress
 

Managing configuration in Drupal 8 - SIDCamp 2015

  • 1. Managing Configuration in Drupal 8 Raffaele Chiocca Technical Architect @Kelyon 1
  • 2. Managing Configuration in Drupal 8 Drupal 8 dispone di un sistema totalmente nuovo per memorizzare la configurazione in maniera uniforme e affidabile. Tutta la configurazione di Drupal 8 , dai moduli abilitati ai fields sono memorizzati utilizzando questo sistema. Questa funzionalità rimpiazza la necessità del modulo contrib Features che in Drupal 8 ritornerà al suo scopo originario. 2
  • 3. Code-Driven Configuration in Drupal • In Drupal la configurazione e i contenuti sono sempre stati memorizzati nello stesso database, ogni volta che si effettuava una modifica dall’interfaccia di amministrazione la modifica non veniva tracciata. • Drupal 6 : Prima Versione di Features con la possibilità di esportare la configurazione in codice PHP. • Drupal 7 : Il supporto a Features è maturo, ma non tutti i componenti sono esportabili, inoltre deve utilizzare moduli di terze parti per coprire i diversi use-cases. • Drupal 8 : Il core è stato progettato per gestire la configurazione in maniera“Code-Driven”. Configurazione e contenuti vengono gestiti in maniera separata, la configurazione è gestita tramite un sistema text- based. 21/06/20153
  • 4. Approccio Drupal 6-7 (core) • Default in Drupal 6 e Drupal 7 (core) – Database Driven • Approccio standard, al click Drupal salva la configurazione nel database e dimentica. • Svantaggi : configurazioni e contenuti vengono mischiati. • Svantaggi : Per effettuare il deployment in un ambiente di produzione è necessario eseguire step-by-step tutte le configurazioni. • Svantaggi : I cambiamenti alle configurazioni non vengono tracciati. 21/06/20154
  • 5. Approccio Drupal 7 + Features • Per consentire l’export delle funzionalità è necessario renderle “esportabili”. • La problematica situazione degli “Overridden”. • Non tutto è esportabile tramite features. • Per esportare la configurazione con Features è necessario inserire gli elementi in una “lista” e non si ha mai il controllo completo dell’ambiente. • Features è perfetto per il packaging delle funzionalità ma non per l’esportazione delle funzionalità, non è possibile esportare delle configurazioni senza prima effettuarne il packaging. 21/06/20155
  • 6. Qual è il problema da risolvere? (1/2) 21/06/20156
  • 7. Qual è il problema da risolvere? (2/2) 21/06/20157
  • 8. La soluzione implementata in Drupal 8 • La configurazione è gestita tramite un sistema “text-driven” • Tutti i files di configurazione rispettano le specifiche YAML (Yet Another Markup Language) • Le configurazioni “active” e “staging” sono separate. • La configurazione “Active” viene memorizzata nel database (configurazione di default). • è possibile cambiare i settaggi dei configuration repositories “Active” e “Staging” nel settings.php 21/06/20158
  • 9. Formato dei files di configurazione YAML • Dichiarativo • Parsato • Si trova in cartelle specifiche chiamate “config” • è trattato in maniera differente. 21/06/20159 PHP • Imperativo • Interpretato • Può trovarsi nella stessa cartella del modulo • è trattato a tutti gli effetti come un modulo
  • 10. Anatomia di un Drupal 8 configuration file (1/2) • Dal modulo system del core di Drupal 8 filename : system.site.yml 21/06/201510
  • 11. Anatomia di un Drupal 8 configuration file (2/2) system.site.yml • uuid: 'd54e0656-a8af-4181-b116-22a304ff3caa' • name: 'SIDCAMP 2015' • mail: 'raffaele.chiocca@kelyon.it' • slogan: ‘sidcamp' • page: • 403: ’access-denied' • 404: ’not-found' • front: user/login • admin_compact_mode: false • weight_select_max: 100 • langcode: en • default_langcode: en 21/06/201511
  • 12. Configuration API @see DrupalCoreConfigConfig MAIN ENTRY POINT : Drupal::config() DrupalCoreConfigConfigFactory (SET/SAVE) DrupalCoreConfigImmutableConfig (GET) DrupalCoreFormConfigFormBaseTrait (fornisce ai form una modalità di accesso alla configurazione DrupalCoreFormConfigFormBase) 21/06/201512
  • 14. Config API (1/4) 21/06/201514 $site_name = Drupal::config('system.site')->get('name'); ----------------------------------------------------------------------------- uuid: 'd54e0656-a8af-4181-b116-22a304ff3caa’ name : 'SIDCAMP 2015' mail: 'raffaele.chiocca@kelyon.it' slogan: ‘sidcamp' page: 403: ’access-denied' 404: ’not-found' front: user/login admin_compact_mode: false weight_select_max: 100 langcode: en default_langcode: en
  • 15. Config API (2/4) 21/06/201515 $page_data = Drupal::config(‘system.site’)->get(‘page’); ----------------------------------------------------------------------------- uuid: 'd54e0656-a8af-4181-b116-22a304ff3caa’ name : 'SIDCAMP 2015' mail: 'raffaele.chiocca@kelyon.it' slogan: ‘sidcamp' page: 403 : ’access-denied' 404 : ’not-found' front : user/login admin_compact_mode: false weight_select_max: 100 langcode: en default_langcode: en
  • 16. Config API (3/4) 21/06/201516 $front_page = Drupal::config(‘system.site’)->get(‘page.front’); ----------------------------------------------------------------------------- uuid: 'd54e0656-a8af-4181-b116-22a304ff3caa’ name : 'SIDCAMP 2015' mail: 'raffaele.chiocca@kelyon.it' slogan: ‘sidcamp' page: 403 : ’access-denied' 404 : ’not-found' front : user/login admin_compact_mode: false weight_select_max: 100 langcode: en default_langcode: en
  • 17. Config API (4/4) 21/06/201517 $site_config = Drupal::config(‘system.site’)->get(); ----------------------------------------------------------------------------- uuid: 'd54e0656-a8af-4181-b116-22a304ff3caa’ name: 'SIDCAMP 2015' mail: 'raffaele.chiocca@kelyon.it’ slogan: ‘sidcamp’ page: 403 : ’access-denied' 404 : ’not-found' front : user/login admin_compact_mode: false weight_select_max: 100 langcode: en default_langcode: en
  • 20. Salvataggio della configurazione 21/06/201520 Istanzia un config object per ogni configuration object name (‘system.site’) che riceve. Drupal::configFactory()->getEditable('system.site') ->set('name', "SIDCAMP AND PIZZA") ->save(); ---------------------------------------------------------------------------------------------------------------------- uuid: 'd54e0656-a8af-4181-b116-22a304ff3caa’ name: 'SIDCAMP AND PIZZA' mail: 'raffaele.chiocca@kelyon.it’ slogan: ‘sidcamp’ page: 403 : ’access-denied' 404 : ’not-found' front : node
  • 21. Drupal 8 State API La variabile ha senso solo per l’ambiente attuale ? Esempi : L’ultima volta in cui sono stati controllati gli aggiornamenti di Drupal $last_cron_run In questo caso va utilizzata la State API di Drupal 8. L’entry point a questa API è Drupal::state() e restituisce un oggetto di tipo DrupalCoreStateStateInterface Esecuzione del cron di Drupal: $last_cron_run = Drupal::state()->get(‘system.cron_last’); Drupal::state()->set(‘system.cron_last’, REQUEST_TIME); 21/06/201521
  • 24. Configuration Schema (1/2) 21/06/201524 system.maintenance.yml ----------------------------------------------------------------------------- enabled: 0 Message : ‘@site is currently under maintenance. We should be back shortly. Thank you for your patience.’
  • 25. Configuration Schema (2/2) 21/06/201525 system.maintenance.yml ----------------------------------------------------------------------------- System.maintenance: type : mapping label : “Maintenance mode” mapping : “enabled”: type : boolean label : “Put site into maintenance mode” “message” : type : text label : “Message to display when in maintenance mode”
  • 27. Override di una configurazione 21/06/201527 • system.maintenance.yml Sovrascrivere globalmente il messaggio mostrato in modalità di manutenzione. --------------------------------------------------------------------- Global $conf ; $conf[‘system.maintenance’][‘message’] = ‘Sorry, SIDCAMP is down now’;
  • 28. Evitare i config overrides 21/06/201528 system.maintenance.yml Ottenere il messaggio di manutenzione “originale” prima del nostro override. ----------------------------------------------------------------------------- OTTIENI IL MESSAGGIO CON GLI OVERRIDES -> (‘SIDCAMP IS DOWN NOW’) $maintenance_message = Drupal::config('system.maintenance')->get(’message'); OTTIENI IL MESSAGGIO SENZA GLI OVERRIDES -> (‘@site is currently under maintenance….) $maintenance_message_editable = Drupal::configFactory()- >getEditable('system.maintenance')->get('message');
  • 29. Effettuare overrides da un modulo custom (1/2) 21/06/201529 services: config_example.overrider: class: Drupalconfig_exampleConfigExampleOverrides tags: - {name: config.factory.override, priority: 5} @see Un esempio rilevante da vedere in questo caso è la seguente interfaccia interface LanguageConfigFactoryOverrideInterface (modulo language del core di drupal) config_example.service.yml
  • 30. 21/06/201530 ConfigExampleOverrides.php /** * @file * Contains Drupalconfig_exampleConfigExampleOverrides. */ namespace Drupalconfig_example; use DrupalCoreConfigConfigFactoryOverrideInterface; /** * Example configuration override. */ class ConfigModuleOverrides implements ConfigFactoryOverrideInterface { public function loadOverrides($names) { $overrides = array(); if (in_array('system.site', $names)) { $overrides['system.site'] = ['name' => ’SIDCAMP overriden site name!']; } return $overrides; } } Effettuare overrides da un modulo custom (2/2)

Editor's Notes

  1. Storia di features
  2. Drupal inizialmente aveva gli YAML, poi per questioni di performance…..
  3. Traits da PHP 5.4.0
  4. Come accedere alla configurazione