it-swarm.com.de

Wie entferne ich ein Konfigurationsobjekt aus der aktiven Konfiguration?

Ich schreibe ein benutzerdefiniertes Modul für Drupal 8. Es definiert ein Feldspeicher-Konfigurationsobjekt in einer Datei namens modules/mymod/config/install/field.storage.bloom_stem.bs_Twitter_ac.yml.

Das Problem ist, dass dies nicht entfernt wird, wenn ich das Modul deinstalliere; es wird anscheinend zurückgelassen, weil ich beim erneuten Installieren des Moduls einen Absturz bekomme.

drush -y pm-uninstall mymod
drush cr
drush -y en mymod

ausnahme 'Drupal\Core\Config\PreExistingConfigException' mit der Meldung 'Konfigurationsobjekte (field.storage.bloom_stem.bs_Twitter_ac), die von mymod bereitgestellt werden, sind bereits in der aktiven Konfiguration vorhanden.'

Es scheint also, dass ich dieses Konfigurationsobjekt manuell entfernen muss. Muss ich mehr Code bereitstellen, der ihn löscht, wenn das Modul deinstalliert wird?

43
artfulrobot

Der derzeit einfachste Weg, dies zu tun, ist die Verwendung von drush php (oder core-cli) um eine interaktive Sitzung zu öffnen.

Dann benutze:

Drupal::configFactory()->getEditable('system.menu.devel')->delete();

Diese Funktionalität wird auch in Drupal console hinzugefügt.

55
lexicant

Drush-Befehl zum Löschen des Konfigurationsobjekts: drush config-delete <config_name>.

33
ya.teck

Sie können die folgenden Methoden verwenden. Verwenden Sie den folgenden Code in hook_uninstall

Drupal::configFactory()->reset('field.storage.bloom_stem.bs_Twitter_ac');

OR

in die yml-Datei können Sie die Abhängigkeiten wie setzen


dependencies:
  module:
    - yourmodule
  enforced:
    module:
      - yourmodule

dann drupal entfernt diese Konfigurationen automatisch bei der Deinstallation Ihres Moduls, wie von Berdir hier beschrieben https://drupal.stackexchange.com/a/173879/10436

14
Ahmad

Verwenden der Drupal-Konsole :

$ drupal config:delete 'the_config_to_delete'
9
VincentLalieu

Drupal :: configFactory () -> reset () löscht das Konfigurationsobjekt nicht. Für diesen Lauf Drupal::configFactory()->getEditable('field.storage.node.your_field_name')->delete()

7
balagan

Ich habe ein einfaches Modul erstellt, mit dem Sie Konfigurationselemente löschen können.

https://www.drupal.org/project/config_delete

3
gnikolovski

Deinstallieren Sie Active Configuration vom benutzerdefinierten Modul

Beim Versuch, Konfigurationsdateien von einem benutzerdefinierten Modul zu deinstallieren, trat dasselbe Problem auf. Ich habe ein benutzerdefiniertes Modul verwendet, um benutzerdefinierte Konfigurationsdateien für Webform zu übergeben. Da ich nicht perfekt bin, möchte ich das Modul deinstallieren, Code bearbeiten und neu installieren können. Ich habe festgestellt, dass bei der Deinstallation meines Moduls auch die Konfigurationsdateien deinstalliert werden, wenn ich auf mein benutzerdefiniertes Modul (my_module) im Abschnitt "Abhängigkeiten/erzwungen" in der Datei "config/install yml" verwiesen habe.

   langcode: en
    status: true
    dependencies:
        enforced:
            module:
                - webform
                - my_module // reference your module here

Mit der Konsole Drupal) können Sie die aktive Konfiguration mit drupal config:delete active config_to_delete Löschen.

2
Umed Godd

Suchen Sie mit drush config-list nach allen aufgelisteten Konfigurationen. Identifizieren Sie dann die Konfiguration, die Sie löschen möchten. Verwenden Sie den folgenden Befehl, um die Konfiguration zu löschen drush config-delete

1
Manikanta

Verwenden Sie hook_uninstall , um die Konfiguration zu entfernen, wenn das Modul deinstalliert wird.

Löschen Sie dann die Konfiguration:

function hook_uninstall() {
  \Drupal::configFactory()->getEditable('the_setting.you.want.to.delete')->delete();
}
0
user72672

Ich lasse hier ein winziges (aber etwas überentwickeltes) Python Skript, das die Konfigurationsreste entfernt. Es basiert auf drush config-delete.

# 'batch_config_delete.py'
# 'drush' has to be available in the current directory

import os
import argparse
import subprocess

MODULES_ROOT = "/var/www/html/MYSITE/web/modules/custom"

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Batch config delete.")
    parser.add_argument("-m", "--module", required=True, help="Module name")
    args = parser.parse_args()
    install_path = os.path.join(MODULES_ROOT, args.module, 'config/install')

    for f in os.listdir(install_path):
        if f.endswith('.yml'):
            config_name = os.path.splitext(f)[0]
            print "Delete config:", config_name
            subprocess.call(['drush', 'config-delete', config_name])

Sollte wie folgt ausgeführt werden:

python ../scripts/batch_config_delete.py -m foobar
0
turdus-merula

In all diesen Antworten wird empfohlen, das zugrunde liegende Konfigurationsobjekt direkt zu löschen. Der richtige Weg besteht jedoch darin, die Entität über das Entitätsspeichersystem zu löschen.

Wenn Sie beispielsweise einen Bildstil mit der ID "groß" haben und diesen löschen möchten, sollten Sie Folgendes tun:

\Drupal::entityTypeManager()->getStorage('image_style')->load('large')->delete();

Auf diese Weise ruft Core "predelete" auf, bevor die Konfiguration gelöscht wird, und "delete" -Hooks, nachdem die Konfiguration gelöscht wurde, auf die sich andere Module möglicherweise verlassen, um verschiedene Bereinigungsvorgänge durchzuführen.

0
Brian

Verwenden Sie Easy Install-Modul , um diese Konfigurationsprobleme zu vermeiden. Dieses Modul ermöglicht das Löschen von Konfigurationen während der Deinstallation eines Moduls. Es funktioniert auch dann, wenn die Konfigurationen eines Moduls keine erzwungenen in yml oder nicht hinzugefügte Konfigurationen im optionalen Ordner .

(Configuration on uninstallation image

Ich könnte die aktive Konfiguration mit dem Befehl drush config: delete wie folgt löschen: drush cdel "name of the config" zum Beispiel in meinem Fall war es drush cdel dtn_Apple_news.setting

nach dem Ausführen wurde die Konfiguration gelöscht und dann drush en-y "module name" hat das Modul installiert.

0
Tejas Shah