Estoy escribiendo un módulo personalizado para Drupal 8. Define un objeto de configuración de almacenamiento de campo, en un archivo llamado modules / mymod / config / install / field.storage.bloom_stem.bs_twitter_ac.yml.
El problema es que esto no se elimina cuando desinstalo el módulo; aparentemente se queda atrás porque, cuando reinstalo el módulo, me cuelgo.
drush -y pm-uninstall mymod
drush cr
drush -y en mymod
excepción 'Drupal \ Core \ Config \ PreExistingConfigException' con el mensaje 'Los objetos de configuración (field.storage.bloom_stem.bs_twitter_ac) proporcionados por mymod ya existen en la configuración activa'
Así que parece que necesito eliminar manualmente este objeto de configuración. ¿Debo proporcionar más código que lo elimine cuando se desinstale el módulo?
8
entities
configuration-management
artfulrobot
fuente
fuente
Respuestas:
La forma más fácil de hacer esto en este momento es usar
drush php
(ocore-cli
) para abrir una sesión interactiva.Luego use:
Esta funcionalidad también se agregará a la consola de Drupal .
fuente
migrate_plus.migration.*
config
tabla.Drush mando a objeto de configuración de borrado:
drush config-delete <config_name>
.fuente
drush -l your.site.domain config-delete <config_name>
drush cdel <config_name>
drush cr
después para eliminar cualquier configuración caché dependencias de lo contrario puede conseguir algo que es similar al siguiente:Error: Call to a member function getConfigDependencyKey() on null
Puedes usar los siguientes métodos. Use el siguiente código en hook_uninstall
O
en el archivo yml puedes poner las dependencias como
entonces drupal eliminará automáticamente estas configuraciones al desinstalar su módulo como lo describe Berdir aquí https://drupal.stackexchange.com/a/173879/10436
fuente
Usando la consola drupal :
fuente
drupal config:delete 'migrate_plus.migration.*'
drupal config:delete active 'name'
o `drupal config: delete staging 'name' (con solo un parámetro suministrado, asumirá que le has dado el tipo y te lo pedirá) para el nombre de configuración.)Drupal :: configFactory () -> reset () no elimina el objeto de configuración. Para esta carrera
Drupal::configFactory()->getEditable('field.storage.node.your_field_name')->delete()
fuente
Creé un módulo simple que puede usar para eliminar elementos de configuración.
https://www.drupal.org/project/config_delete
fuente
Puede usar la consola de Drupal para eliminar la configuración activa, con
drupal config:delete active config_to_delete
.fuente
Busque todas las configuraciones enumeradas usando drush config-list. Luego identifique la configuración que desea eliminar. Utilice el siguiente comando para eliminar la configuración drush config-delete
fuente
Dejo aquí un pequeño script de Python (aunque un poco excesivamente diseñado) que elimina las sobras de configuración. Se basa en
drush config-delete
.Debería ejecutarse así:
fuente
Use el módulo Easy Install para evitar estos problemas de configuración, este módulo permitirá eliminar configuraciones mientras desinstala un módulo, funciona incluso si las configuraciones de un módulo no contienen configuraciones forzadas en yml o configuraciones no agregadas en la carpeta opcional .
fuente
Desinstalar la configuración activa del módulo personalizado
Me encontré con el mismo problema al intentar desinstalar archivos de configuración de un módulo personalizado. Tengo un módulo personalizado utilizado para pasar archivos de configuración personalizados para el formulario web. Como no soy perfecto, quiero poder desinstalar el módulo, editar el código y reinstalarlo. Descubrí que si hacía referencia a mi módulo personalizado (my_module) en la sección de dependencias / forzadas en el archivo config / install yml, cuando desinstalé mi módulo, los archivos de configuración también se desinstalarían.
fuente
Todas estas respuestas recomiendan eliminar el objeto de configuración subyacente directamente, pero la forma correcta es eliminar la entidad a través del sistema de almacenamiento de la entidad.
Por ejemplo, si tiene un estilo de imagen con ID "grande" y desea eliminarlo, debe hacer esto:
Al hacerlo de esta manera, core invocará "predelete" antes de que se elimine la configuración y se enganche "delete" después de que se elimine la configuración, en la que otros módulos pueden confiar para realizar varias operaciones de limpieza.
fuente
Use hook_uninstall para eliminar la configuración, cuando se desinstala el módulo.
Luego elimine la configuración:
fuente