logo

Extra Block Types (EBT) - Nuova esperienza con Layout Builder❗

Extra Block Types (EBT) - tipi di blocchi stilizzati e personalizzabili: Slideshows, Tabs, Cards, Accordion e molti altri. Impostazioni integrate per sfondo, DOM Box, plugin javascript. Vivi oggi il futuro della costruzione dei layout.

Demo moduli EBT Scarica moduli EBT

❗Extra Paragraph Types (EPT) - Nuova esperienza con Paragraphs

Extra Paragraph Types (EPT) - insieme di moduli basati su paragrafi in modo analogo.

Demo moduli EPT Scarica moduli EPT

Scorri
03/10/2025, by Ivan

Drupal 8 include il supporto per un linguaggio di schema/metadati creato con Kwalify (http://www.kuwata-lab.com/kwalify/) per i file di configurazione YAML. Kwalify stesso è scritto in Ruby, e sono state necessarie alcune piccole modifiche al formato, quindi non tutti i dettagli di Kwalify si applicano direttamente, ma è comunque molto simile.

Cheatsheet

Per una comprensione rapida e alcuni esempi pratici, guarda questa cheatsheet e poi continua a leggere se hai ancora domande:

ConfigSchemaCheatSheet1.5Thumb

/sites/default/files/config-schema-cheat-sheet1.5.pdf

Esempio introduttivo

Il modulo System ha due impostazioni di configurazione relative alla modalità di manutenzione (se il sito è messo offline per i visitatori normali):

<?php
$config = \Drupal::config('system.maintenance');
$message = $config->get('message');
$langcode = $config->get('langcode');
?>

(Il fatto che la manutenzione sia attiva è memorizzato nel sistema state, non nella configurazione.)

I valori predefiniti per questo oggetto di configurazione si trovano in core/modules/system/config/install/system.maintenance.yml come:

message: '@site è attualmente in manutenzione. Torneremo presto. Grazie per la pazienza.'
langcode: en

Ogni modulo può avere tanti oggetti di configurazione quanti ne servono. Tutto ciò è descritto in uno o più file di schema che vengono distribuiti insieme al modulo. Nel caso del modulo System, i file si trovano in core/modules/system/config/schema. La sezione rilevante dello schema dal file system.schema.yml appare così:

system.maintenance:
  type: config_object
  label: 'Maintenance mode'
  mapping:
    message:
      type: text
      label: 'Message to display when in maintenance mode'

La chiave di livello superiore ("system.maintenance") nel file si riferisce al nome base del file .yml ("system.maintenance.yml") e al nome dell’oggetto di configurazione (config('system.maintenance')). I livelli annidati descrivono cosa c’è nel file. Lo schema di configurazione predefinisce due tipi di file di configurazione: config_object per i file di configurazione globali e config_entity per le entità. Il tipo config_object è definito in core.data_types.schema.yml come segue:

# Root of a configuration object.

_core_config_info:
  type: mapping
  mapping:
    default_config_hash:
      type: string
      label: 'Default configuration hash'

config_object:
  type: mapping
  mapping:
    langcode:
      type: string
      label: 'Language code'
    _core:
      type: _core_config_info

Il mapping è il tipo base per coppie chiave-valore. Usando il tipo config_object, la definizione della modalità di manutenzione riutilizza le chiavi langcode e _core e aggiunge un’altra chiave per il messaggio. Tornando alla definizione di system.maintenance, l’etichetta della schema label:'Maintenance mode' descrive il contenuto dello schema. Poi gli elementi effettivi sono elencati sotto la chiave mapping, dove è definita la chiave message, ereditando langcode e _core dal tipo base. Ogni elemento ha un tipo e una chiave label, che descrivono il tipo di dato e forniscono una descrizione. L’etichetta di solito coincide o è simile a quella del modulo di configurazione dove il valore può essere modificato dall’amministratore di sistema.

In tutti i casi supportati dal core, l’elemento di livello superiore nel file .yml sarà un mapping con elementi descritti in fondo alla lista di mapping. Bisogna usare uno dei due sottotipi definiti di mapping: config_object o config_entity. I singoli elementi del mapping possono essere di qualsiasi tipo a seconda di come sono definiti i dati. La chiave _core e tutte le chiavi in _core sono riservate al core di Drupal.

A cosa servono i file di schema?

1. Lo scopo principale iniziale era il supporto multilingua. Serve uno strumento per identificare tutte le stringhe traducibili nella configurazione fornita, così quando distribuisci le tue impostazioni, viste predefinite, ruoli utente aggiuntivi, voci di menu ecc., possiamo offrirle alla traduzione come parte del tuo modulo/tema su https://localize.drupal.org. Per questo scopo bastano i livelli e i tipi di annidamento.

2. Usiamo gli schemi anche per fornire moduli reali di traduzione basati sui tuoi dati. In questo caso i tipi assumono più importanza e le etichette diventano fondamentali. Il modulo di traduzione della configurazione core usa gli schemi per costruire i form di traduzione e salvare le traduzioni. I due tipi traducibili più importanti sono label (per input testuali a riga singola) e text (per input testuali multi-riga).

3. Grazie alla conoscenza incorporata negli schemi di configurazione su cosa è memorizzato nell’oggetto di configurazione, la persistenza predefinita delle entità di configurazione richiede uno schema per poter esportare le proprietà corrette con i tipi definiti. Anche se è meglio fornire sempre schemi, se davvero non vuoi farlo, puoi implementare il metodo toArray() nella tua entità di configurazione per evitare di richiedere uno schema.

4. Lo schema di configurazione viene anche usato per legare automaticamente i valori ai tipi attesi. Questo assicura che, anche se PHP e le web form in generale preferiscono stringhe, la configurazione venga salvata con i tipi corretti. Questo è importante affinché nelle differenze (diff) di configurazione vengano mostrati solo cambiamenti reali e non cambiamenti di tipo accidentali.

5. In PHPUnit tutti i test derivati da TestBase applicano per default uno schema rigoroso. Questo genera errori se lo schema manca o non è valido. Anche se non è raccomandato, è possibile disattivarlo nei test impostando:

protected $strictConfigSchema = FALSE;

Vedi https://drupal.org/project/config_inspector per un modulo che aiuta a fare debug degli schemi. Questo modulo aiuta a trovare schemi mancanti e differenze con varie viste dei dati e dello schema.

Ci sono altre idee di utilizzo per gli schemi che possono essere implementate nei moduli, ad esempio per la creazione di interfacce web service. Probabilmente emergeranno altri casi d’uso non ancora previsti.