Как удалить объект конфигурации из активной конфигурации?

Я пишу настраиваемый модуль для Drupal 8. Он определяет объект конфигурации хранилища полей в файле под названием modules /mymod /config /install /field.storage.bloom_stem.bs_twitter_ac.yml.

Проблема заключается в том, что это не удаляется при удалении модуля; он, по-видимому, остался позади, потому что, когда я переустанавливаю модуль, я получаю сбой.

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

исключение «Drupal \ Core \ Config \ PreExistingConfigException» с сообщением «Объекты конфигурации (field.storage.bloom_stem.bs_twitter_ac), предоставленные mymod, уже существуют в активной конфигурации

Мне кажется, мне нужно, как вручную удалить этот объект конфигурации. Нужно ли мне предоставить еще один код, который удаляет его, когда модуль будет удален?

37 голосов | спросил artfulrobot 7 J000000Tuesday15 2015, 18:48:16

9 ответов


41

Самый простой способ сделать это на данный момент - использовать drush php (или core-cli), чтобы открыть интерактивный сеанс.

Затем используйте:

Drupal :: configFactory () - > getEditable ( 'system.menu.devel') - > удалить ();

Эта функциональность также будет добавлена ​​в консоль Drupal .

ответил lexicant 10 Jpm1000000pmSun, 10 Jan 2016 20:10:42 +030016 2016, 20:10:42
20

Команда Drush для удаления объекта конфигурации: drush config-delete <config_name>.

ответил ya.teck 8 +03002016-10-08T07:59:51+03:00312016bEurope/MoscowSat, 08 Oct 2016 07:59:51 +0300 2016, 07:59:51
9

Используя консоль drupal :

$ drupal config: удалить 'the_config_to_delete'
ответил VincentLalieu 12 J0000006Europe/Moscow 2016, 15:17:00
9

Вы можете использовать следующие методы. Используйте следующий код в hook_uninstall

Drupal :: configFactory () - > сброса ( 'field.storage.bloom_stem.bs_twitter_ac');

ИЛИ

в yml-файле вы можете поместить зависимости, например


зависимости:
  модуль:
    - yourmodule
  исполнение:
    модуль:
      - yourmodule

тогда drupal автоматически удалит эти конфигурации при удалении вашего модуля, как описано Berdir здесь https://drupal.stackexchange.com /а /173879/10436

ответил Ahmad 10 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 10 Sep 2015 15:44:57 +0300 2015, 15:44:57
5

Drupal :: configFactory () -> reset () не удаляет объект конфигурации. Для этого запуска Drupal :: configFactory () -> getEditable ('field.storage.node.your_field_name') -> delete ()

ответил balagan 6 SunEurope/Moscow2015-12-06T16:31:04+03:00Europe/Moscow12bEurope/MoscowSun, 06 Dec 2015 16:31:04 +0300 2015, 16:31:04
2

Вы можете использовать консоль Drupal для удаления активной конфигурации с помощью drupal config: delete active config_to_delete.

ответил Umed Godd 30 PM00000080000002131 2016, 20:27:21
0

Я оставляю здесь крошечный (но немного переработанный) скрипт Python, который удаляет остатки конфигурации. Он использует drush config-delete.

# 'batch_config_delete.py'
# 'drush' должен быть доступен в текущем каталоге

import os
import argparse
подпроцесс импорта

MODULES_ROOT = "/var /www /html /MYSITE /web /modules /custom"

если __name__ == "__main__":
    parser = argparse.ArgumentParser (description = "Batch config delete.")
    parser.add_argument ("- m", "--module", required = True, help = "Имя модуля")
    args = parser.parse_args ()
    install_path = os.path.join (MODULES_ROOT, args.module, 'config /install')

    для f в os.listdir (install_path):
        если f.endswith ('. yml'):
            config_name = os.path.splitext (f) [0]
            print "Удалить конфиг:", имя_конфигурации
            subprocess.call (['drush', 'config-delete', config_name])

Должно выполняться следующим образом:

python ../scripts/batch_config_delete.py -m foobar
ответил turdus-merula 23 Jpm1000000pmMon, 23 Jan 2017 22:50:50 +030017 2017, 22:50:50
0

Используйте модуль Easy Install , чтобы избежать этих проблем с конфигурацией, этот модуль позволит удалить конфигурации при удалении модуля он работает, даже если в конфигурациях модуля не содержится принудительно в yml или не добавлены конфиги в дополнительную папку.

 Конфигурация при удалении изображения

ответил Karthikeyan Manivasagam 22 PM00000080000004931 2017, 20:45:49
0

Удаление активной конфигурации из пользовательского модуля

Я столкнулся с той же проблемой, пытаясь удалить файлы конфигурации из настраиваемого модуля. У меня есть специальный модуль, используемый для передачи пользовательских файлов конфигурации для веб-формы. Поскольку я не совершенен, я хочу иметь возможность удалить модуль, отредактировать код и переустановить его. Я обнаружил, что если бы я ссылался на свой пользовательский модуль (my_module) в разделе зависимостей /принудительных изменений в файле config /install yml, когда я удалил свой модуль, файлы конфигурации также удалили бы.

langcode: ru
    status: true
    зависимости:
        исполнение:
            модуль:
                - веб-форма
                - my_module //ссылаюсь на ваш модуль здесь
ответил Robert Ben Parkinson 29 MarpmThu, 29 Mar 2018 17:54:35 +03002018-03-29T17:54:35+03:0005 2018, 17:54:35

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132