Ich schreibe ein benutzerdefiniertes Modul für Drupal 8. Es definiert ein Feldspeicherkonfigurationsobjekt 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 erleide.
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 wurden, sind bereits in der aktiven Konfiguration vorhanden'
Also muss ich anscheinend einige wie manuell dieses Konfigurationsobjekt entfernen. Muss ich mehr Code bereitstellen, der diesen löscht, wenn das Modul deinstalliert wird?
quelle
Antworten:
Der derzeit einfachste Weg, dies zu tun, besteht darin , eine interaktive Sitzung mit
drush php
(odercore-cli
) zu öffnen.Dann benutze:
Diese Funktionalität wird auch in die Drupal-Konsole aufgenommen .
quelle
migrate_plus.migration.*
config
Tabelle.Drush Befehl zu löschen Konfigurationsobjekt:
drush config-delete <config_name>
.quelle
drush -l your.site.domain config-delete <config_name>
drush cdel <config_name>
drush cr
after ausführen sollten , um zwischengespeicherte Konfigurationsabhängigkeiten zu entfernen. Andernfalls wird möglicherweiseError: Call to a member function getConfigDependencyKey() on null
Sie können die folgenden Methoden anwenden. Verwenden Sie den folgenden Code in hook_uninstall
ODER
In die yml-Datei können Sie die Abhängigkeiten wie folgt einfügen
Dann entfernt Drupal diese Konfigurationen beim Deinstallieren Ihres Moduls automatisch, wie von Berdir hier beschrieben. https://drupal.stackexchange.com/a/173879/10436
quelle
Verwendung der Drupal-Konsole :
quelle
drupal config:delete 'migrate_plus.migration.*'
drupal config:delete active 'name'
oder `Drupal config: delete staging‚name‘(mit nur einem Parameter geliefert, es wird vorausgesetzt , dass Sie ihm die Art und prompt gegeben haben Sie für den Konfigurationsnamen.)Drupal :: configFactory () -> reset () löscht das Konfigurationsobjekt nicht. Für diesen Lauf
Drupal::configFactory()->getEditable('field.storage.node.your_field_name')->delete()
quelle
Ich habe ein einfaches Modul erstellt, mit dem Sie Konfigurationselemente löschen können.
https://www.drupal.org/project/config_delete
quelle
Mit der Drupal-Konsole können Sie die aktive Konfiguration löschen
drupal config:delete active config_to_delete
.quelle
Suchen Sie nach allen aufgelisteten Konfigurationen mit der Konfigurationsliste drush. Geben Sie dann die Konfiguration an, die Sie löschen möchten. Verwenden Sie den folgenden Befehl, um die Konfiguration drush config-delete zu löschen
quelle
Ich lasse hier ein winziges (noch etwas überarbeitetes) Python-Skript, das die Konfigurationsreste entfernt. Es verlässt sich auf
drush config-delete
.Sollte folgendermaßen ausgeführt werden:
quelle
Verwenden Sie das Easy Install-Modul , um 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 in yml erzwungenen oder nicht hinzugefügten Konfigurationen im optionalen Ordner enthalten.
quelle
Deinstallieren Sie Active Configuration vom benutzerdefinierten Modul
Ich hatte das gleiche Problem beim Versuch, Konfigurationsdateien von einem benutzerdefinierten Modul zu deinstallieren. Ich verwende ein benutzerdefiniertes Modul, um benutzerdefinierte Konfigurationsdateien für Webform zu übergeben. Da ich nicht perfekt bin, möchte ich das Modul deinstallieren, den Code bearbeiten und neu installieren können. Wenn ich mein benutzerdefiniertes Modul (my_module) im Abschnitt "dependencies / enforced" in der Datei "config / install yml" referenzierte, wurden bei der Deinstallation meines Moduls auch die Konfigurationsdateien deinstalliert.
quelle
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 "large" haben und ihn löschen möchten, sollten Sie dies tun:
Auf diese Weise ruft core "predelete" auf, bevor die Konfiguration gelöscht wird, und "delete" -Hooks, nachdem die Konfiguration gelöscht wurde, auf die andere Module möglicherweise angewiesen sind, um verschiedene Bereinigungsvorgänge auszuführen.
quelle
Verwenden Sie hook_uninstall , um die Konfiguration zu entfernen, wenn das Modul deinstalliert wird.
Dann löschen Sie die Konfiguration:
quelle