it-swarm.com.de

Ist es möglich, das vom Modul bereitgestellte Konfigurationsschema in einem hook_update_N () zu aktualisieren?

Ich habe also ein benutzerdefiniertes Modul mit einer Datei module.schema, das ein Konfigurationsschema für dieses Modul definiert und nicht über das Datenbank-/Feldschema spricht.

module.settings:
type: config_object
label: 'Settings for Module'
mapping:
  my_ids:
   type: sequence
   label: 'Ids from config'
   sequence:
    type: string
    label: 'ids'

Ich habe eine module.settings-Datei bereitgestellt wie:

my_ids:
 - 1
 - 2
 - 3
 - 4

Wie Sie sehen können, ist mein Fehler, dass ich in meinem Schema einen type: int Benötigt habe, nicht type: string.

Auf der Konfigurationssynchronisationsseite sehe ich Drupal hat sich darum gekümmert und dies in seiner aktiven Konfiguration korrigiert, indem Zeichenfolgenwerte für "my_ids" festgelegt wurden und natürlich ein Unterschied zwischen "inszeniert" und "aktiv" erzeugt wurde Konfiguration. Die aktive Konfiguration hat jetzt Zeichenfolgen:

my_ids:
 - "1"
 - "2"
 - "3"
 - "4"

Ich möchte das Schema dieser Konfiguration auf int aktualisieren, ohne das Modul neu zu installieren. Ist dies möglich?.

Es wurde versucht, in einem Update-Hook wie folgt in den Schemadienst zu schreiben:

  $name = 'module.schema';
  $path = '/home/user/Drupal/docroot/modules/module/config/schema';
  $source = new FileStorage($path);
  /** @var \Drupal\Core\Config\ExtensionInstallStorage $active_schema */
  $active_schema = \Drupal::service('config.storage.schema');
  $active_schema->write($name, $source->read($name));

Aber es stellt sich heraus, dass "Write operation is not allowed." Und das klingt nicht nach einer Überraschung .. :)

Gibt es also eine andere Lösung für dieses Schema-Update, außer die Neuinstallation des Moduls?

Vielen Dank.

4
Pan Chrono

Nun, es stellte sich heraus, dass ich einige Zeit hier verbracht habe, weil ich versucht habe, die Schemadatei zu aktualisieren, indem ich int not integer LOL eingegeben habe. Alles was ich brauchte war integer und schließlich Caches löschen :)

2
Pan Chrono

Ich denke, alles, was Sie brauchen, ist hier: https://www.drupal.org/docs/8/api/update-api/updating-configuration-in-drupal-8

Das zweite Beispiel sollte Ihr Fall sein

1
McAle