web-dev-qa-db-fra.com

Comment supprimer un objet de configuration de la configuration active?

J'écris un module personnalisé pour Drupal 8. Il définit un objet de configuration de stockage sur le terrain, dans un fichier appelé modules/mymod/config/install/field.storage.bloom_stem.bs_Twitter_ac.yml.

Le problème est que cela n'est pas supprimé lorsque je désinstalle le module; il est apparemment laissé derrière parce que, lorsque je réinstalle le module, j'obtiens un plantage.

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

l'exception 'Drupal\Core\Config\PreExistingConfigException' avec le message 'Les objets de configuration (field.storage.bloom_stem.bs_Twitter_ac) fournis par mymod existent déjà dans la configuration active'

Il semble donc que j'aie besoin de savoir comment supprimer manuellement cet objet de configuration. Dois-je fournir un peu plus de code qui le supprime lorsque le module est désinstallé?

43
artfulrobot

Pour le moment, la méthode la plus simple consiste à utiliser drush php (ou core-cli) pour ouvrir une session interactive.

Utilisez ensuite:

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

Cette fonctionnalité sera également ajoutée à Drupal .

55
lexicant

Commande Drush pour supprimer l'objet de configuration: drush config-delete <config_name>.

33
ya.teck

Vous pouvez utiliser les méthodes suivantes. Utilisez le code suivant dans hook_uninstall

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

OR

dans le fichier yml, vous pouvez mettre les dépendances comme


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

alors drupal supprimera automatiquement ces configurations lors de la désinstallation de votre module comme décrit par Berdir ici https://drupal.stackexchange.com/a/173879/10436

14
Ahmad

Utilisation de la console drupal :

$ drupal config:delete 'the_config_to_delete'
9
VincentLalieu

Drupal :: configFactory () -> reset () ne supprime pas l'objet config. Pour cette exécution, Drupal::configFactory()->getEditable('field.storage.node.your_field_name')->delete()

7
balagan

J'ai créé un module simple que vous pouvez utiliser pour supprimer des éléments de configuration.

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

3
gnikolovski

Désinstaller la configuration active du module personnalisé

J'ai rencontré le même problème en essayant de désinstaller les fichiers de configuration d'un module personnalisé. J'ai un module personnalisé utilisé pour transmettre des fichiers de configuration personnalisés pour le formulaire Web. Comme je ne suis pas parfait, je veux pouvoir désinstaller le module, modifier le code et réinstaller. J'ai trouvé que si je référençais mon module personnalisé (mon_module) dans la section dépendances/forcé du fichier yml config/install, lorsque je désinstallais mon module, les fichiers de configuration se désinstallaient également.

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

Vous pouvez utiliser Drupal console pour supprimer la configuration active, avec drupal config:delete active config_to_delete.

2
Umed Godd

Recherchez toutes les configurations répertoriées à l'aide de drush config-list Ensuite, identifiez la configuration que vous souhaitez supprimer. Utilisez la commande ci-dessous pour supprimer la configuration drush config-delete

1
Manikanta

Utilisez hook_uninstall pour supprimer la configuration, lorsque le module est désinstallé.

Supprimez ensuite la configuration:

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

Je laisse ici un tout petit (mais un peu trop ingénieux) Python qui supprime les restes de configuration. Il s'appuie sur 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])

Doit être exécuté comme ceci:

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

Toutes ces réponses recommandent de supprimer directement l'objet de configuration sous-jacent, mais la bonne façon est de supprimer l'entité via le système de stockage d'entité.

Par exemple, si vous avez un style d'image avec l'ID "grand" et que vous souhaitez le supprimer, vous devez procéder comme suit:

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

En procédant de cette façon, le noyau invoquera "prédéliminer" avant la suppression de la configuration et "supprimer" les crochets après la suppression de la configuration, sur lesquels d'autres modules peuvent s'appuyer pour effectuer diverses opérations de nettoyage.

0
Brian

Utilisez module d'installation facile pour éviter ces problèmes de configuration, ce module permettra de supprimer les configurations lors de la désinstallation d'un module, cela fonctionne même si la configuration d'un module ne contient pas appliquée en yml ou configs non ajoutés dans le dossier facultatif .

Configuration on uninstallation image

0

Je pourrais supprimer la configuration active en utilisant la commande drush config: delete comme ci-dessous drush cdel "name of the config" par exemple dans mon cas c'était drush cdel dtn_Apple_news.setting

après avoir exécuté ceci, la configuration a été supprimée puis exécutée drush en-y "module name" a obtenu l'installation du module.

0
Tejas Shah