Estou escrevendo um módulo personalizado para o Drupal 8. Ele define um objeto de configuração de armazenamento em campo, em um arquivo chamado modules / mymod / config / install / field.storage.bloom_stem.bs_twitter_ac.yml.
O problema é que isso não é removido quando eu desinstalo o módulo; aparentemente ele foi deixado para trás porque, quando reinstalo o módulo, ocorre uma falha.
drush -y pm-uninstall mymod
drush cr
drush -y en mymod
a exceção 'Drupal \ Core \ Config \ PreExistingConfigException' com a mensagem 'Objetos de configuração (field.storage.bloom_stem.bs_twitter_ac) fornecidos pelo mymod já existem na configuração ativa'
Então, parece que preciso de alguma maneira remover manualmente esse objeto de configuração. Preciso fornecer mais um código que o exclua quando o módulo é desinstalado?
fonte
Respostas:
A maneira mais fácil de fazer isso no momento é usar
drush php
(oucore-cli
) para abrir uma sessão interativa.Então use:
Essa funcionalidade também será adicionada ao console do Drupal .
fonte
migrate_plus.migration.*
config
tabela.Comando Drush a objeto de configuração de exclusão:
drush config-delete <config_name>
.fonte
drush -l your.site.domain config-delete <config_name>
drush cdel <config_name>
drush cr
seguinte para remover as dependências de configurações em cache, caso contrário poderá obter algo parecido com isto:Error: Call to a member function getConfigDependencyKey() on null
Você pode usar os seguintes métodos. Use o seguinte código em hook_uninstall
OU
no arquivo yml, você pode colocar as dependências como
o drupal removerá automaticamente essas configurações ao desinstalar o módulo, conforme descrito por Berdir aqui https://drupal.stackexchange.com/a/173879/10436
fonte
Usando o console drupal :
fonte
drupal config:delete 'migrate_plus.migration.*'
drupal config:delete active 'name'
ou `drupal config: delete staging 'name' (com apenas um parâmetro fornecido, ele assumirá que você deu o tipo e solicitará para o nome da configuração).Drupal :: configFactory () -> reset () não exclui o objeto de configuração. Para esta corrida
Drupal::configFactory()->getEditable('field.storage.node.your_field_name')->delete()
fonte
Criei um módulo simples que você pode usar para excluir itens de configuração.
https://www.drupal.org/project/config_delete
fonte
Você pode usar o console do Drupal para excluir a configuração ativa, com
drupal config:delete active config_to_delete
.fonte
Pesquise todas as configurações listadas usando drush config-list. Em seguida, identifique a configuração que você deseja excluir. Use o comando abaixo para excluir a configuração drush config-delete
fonte
Deixo aqui um pequeno script Python (ainda um pouco excedente da engenharia) que remove as sobras da configuração. Depende
drush config-delete
.Deve ser executado assim:
fonte
Use o módulo Easy Install para evitar esses problemas de configuração; este módulo permitirá excluir configurações durante a desinstalação de um módulo; ele funciona mesmo que as configurações de um módulo não contenham imposição em yml ou não tenham sido adicionadas na pasta opcional .
fonte
Desinstalar a configuração ativa do módulo personalizado
Eu encontrei o mesmo problema ao tentar desinstalar arquivos de configuração de um módulo personalizado. Eu tenho um módulo personalizado usado para passar arquivos de configuração personalizados para o formulário da web. Como não sou perfeita, quero poder desinstalar o módulo, editar o código e reinstalar. Descobri que se referisse meu módulo personalizado (my_module) na seção dependências / imposta no arquivo config / install yml, quando eu desinstalava meu módulo, os arquivos de configuração também eram desinstalados.
fonte
Todas essas respostas recomendam a exclusão direta do objeto de configuração subjacente, mas a maneira correta é excluir a entidade através do sistema de armazenamento da entidade.
Por exemplo, se você possui um estilo de imagem com o ID "grande" e deseja excluí-lo, faça o seguinte:
Fazendo assim, o núcleo invocará "pré-exclusão" antes da exclusão da configuração e ganchos "delete" após a exclusão da configuração, na qual outros módulos podem confiar para executar várias operações de limpeza.
fonte
Use hook_uninstall para remover a configuração quando o módulo for desinstalado.
Em seguida, exclua a configuração:
fonte