Il sistema di configuration management è una delle grandi novità di Drupal 8, gli use-cases di riferimento per l'utilizzo del sistema di configuration management in Drupal 8 sono differenti da quelli del sistema Drupal 7 + Features sia dal punto di vista di un site-builder che dal punto di vista dello sviluppo.
Il modulo Features in Drupal 8 ritornerà ad essere impiegato per il suo scopo originario.
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
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
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
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
Storia di features
Drupal inizialmente aveva gli YAML, poi per questioni di performance…..