Estou construindo um módulo personalizado no Drupal 8. Ele inclui alguns arquivos de configuração YAML.
À medida que desenvolvo, preciso alterar e adicionar à configuração, por exemplo, para adicionar outro campo à minha entidade personalizada.
No momento, a única maneira que encontrei para fazer o Drupal perceber as alterações é desinstalar o módulo e reinstalá-lo.
Existe uma maneira de fazer com que o Drupal verifique se os arquivos de configuração fornecidos pelos módulos são iguais aos da configuração ativa e, caso contrário, atualize a configuração ativa? Como são tratadas as atualizações do módulo? Em D7 hook_update_N
seria usado para adicionar campos usando PHP, mas parece que isso deve ser tratado pelo CM em D8?
Coisas que tentei após atualizar os arquivos yml no módulo:
drush cr
, sincronização de configuração.copiar manualmente todos os arquivos de configuração atualizados para
sites/default/files/config_XXX/staging/
- mas isso gera este erro "A configuração em estágios não pode ser importada, porque se origina de um site diferente desse site. Você só pode sincronizar a configuração entre instâncias clonadas deste site". .importando manualmente os arquivos um por um usando o gerenciador de configuração. Isso funciona, mas obviamente deve haver uma maneira mais automática.
[EDIT] use manualmente o módulo config_update para inspecionar alterações e 'reverter' para a configuração do módulo. Novamente, isso é manual.
EDIT: Do gerenciamento de configuração - faça e não faça
NÃO É
Tente alterar a configuração ativa no seu site alterando os arquivos no diretório config / install de um módulo. Isso NÃO funcionará porque o Drupal somente lerá esse diretório quando o módulo estiver instalado.
... mas muda há vai acontecer, a menos que os módulos estão ligados a qualquer config-se necessária em seu primeiro lançamento, e pode nunca atualizar ou adicionar configuração.
Desde já, obrigado.
fonte
hook_update_N
que eu suponho, mas não sei ao certo o quehook_update_N
. Excelente artigo sobre o Drupal 8 para sites pequenos (e parte 2 ). No D8 "os sites possuem sua configuração, não os módulos" .Respostas:
Conforme mencionado na pergunta original e nos comentários de acompanhamento, há uma variedade de módulos de contribuição e métodos manuais para fazer isso.
Para fazer isso automaticamente, ou de uma maneira personalizada, acho que
hook_update_N()
ainda é provavelmente a opção mais viável.Por exemplo, este é um exemplo do Head 2 Head para atualizar
system.site
e definir odefault_langcode
:Você também pode ler a configuração (recomendado apenas para adicionar nova configuração, não necessariamente atualizando ou substituindo a configuração que pode ter sido personalizada):
Onde
$path
é o caminho absoluto para omy_config.foo.yml
arquivo.fonte
Como cheguei nessa questão também, mas não encontrei a resposta correta para minha situação aqui, gostaria de adicionar outra resposta.
Atenção: Antipadrão à frente!
Caso de uso
Quando estamos desenvolvendo projetos, atualizamos constantemente nosso ambiente de teste / aceitação com novas atualizações de configuração. Tomemos, por exemplo, um módulo de notícias fictício simples, gostaríamos de adicionar um tipo de conteúdo ao módulo e implantá-lo em nosso ambiente de aceitação. Após a revisão, concluímos que faltam alguns campos e outras coisas relacionadas à configuração. Como sabemos que o ambiente de aceitação não está sendo atualizado na configuração, realmente queremos apenas recarregar toda a configuração do módulo enquanto adicionamos novas funcionalidades e não nos incomodamos importando todos os
.yml
arquivos alterados .Nós só precisamos da nossa configuração em módulos quando estamos desenvolvendo multisites. Para sites únicos, geralmente usamos apenas a configuração do site exportado, na qual a próxima etapa é desnecessária.
Reimporte totalmente a configuração (anti-padrão!)
Descobrimos que, usando o serviço ConfigInstaller , podemos reimportar a configuração completa novamente de um módulo específico.
Use com cuidado!
Gostaria de acrescentar que isso substituirá qualquer conteúdo ativo que tenha sido alterado no ambiente. Portanto, use esta solução somente quando tiver certeza de que é seguro substituir a configuração ativa. Nunca usaremos isso em um ambiente de produção e aplicaremos apenas no desenvolvimento inicial.
Primeiro experimente a solução da @ jhedstrom antes de começar a considerar esta.
fonte
Eu encontrei este Gist no GitHub, que reverte / recarrega a configuração do módulo usando o drush:
fonte
Com base no meu comentário: Como atualizo a configuração de um módulo?
Eu criei uma pequena função que me ajuda com isso, aqui meu código de exemplo:
fonte
A resposta acima (reimportação completa) também funcionou no meu caso de uso, mas primeiro passei um tempo procurando uma reimportação mais seletiva. Aqui está o código que eu tinha, que parecia funcionar como um gancho de atualização e foi baseado no código do módulo config_update:
fonte
O módulo Sincronizador de configuração ajuda a resolver esse problema de uma maneira agradável. Esse conjunto de 7 módulos parece um pouco exagerado apenas para esse caso (sua intenção é mesclar com segurança atualizações sem substituir as personalizações), mas devido ao seu conceito, ele também permite rastrear e importar alterações de configuração dos módulos / instalação e instalação. / pastas opcionais rapidamente.
Basicamente, você pode testá-lo da seguinte maneira:
Nota: se você única quiser usar o config_sync para acelerar a importação de configuração durante o desenvolvimento do módulo (e você não se preocupam com a fusão com atualizações do cliente), é o suficiente para ter esta suite instalado e ativado apenas em seu ambiente (desenvolvimento) local ( supondo que seu módulo vá para ambientes superiores após a finalização e você use o gerenciamento de configuração do núcleo do D8 para postar sua configuração em ambientes superiores).
fonte