मैं सक्रिय कॉन्फ़िगरेशन से कॉन्फ़िगरेशन ऑब्जेक्ट कैसे निकालूं?


41

मैं Drupal 8 के लिए एक कस्टम मॉड्यूल लिख रहा हूं। यह एक फील्ड स्टोरेज कॉन्फिगरेशन ऑब्जेक्ट को परिभाषित करता है, जिसे फाइल में मॉड्यूल / 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 द्वारा प्रदान किया गया पहले से ही सक्रिय कॉन्फ़िगरेशन में मौजूद है'

तो ऐसा लगता है कि मुझे इस कॉन्फ़िगरेशन ऑब्जेक्ट को मैन्युअल रूप से निकालने की आवश्यकता है। क्या मुझे मॉड्यूल को अनइंस्टॉल होने पर इसे हटाने के लिए कुछ और कोड प्रदान करने की आवश्यकता है?


एक समान समस्या दिखती
othermachines

आसान स्थापित मॉड्यूल इस मुद्दे को पूरी तरह से drupal.org/project/easy_install
उससे

जवाबों:


53

इस समय ऐसा करने का सबसे आसान तरीका एक इंटरैक्टिव सत्र खोलने के लिए drush php(या core-cli) का उपयोग करना है।

फिर उपयोग करें:

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

इस कार्यक्षमता को Drupal कंसोल में भी जोड़ा जाएगा


1
इससे समस्या पूरी तरह हल हो गई। 'System.menu.devel' को 'the_setting.you.want.to.delete' में बदलें
Eric

कई कॉन्फिग्स को हटाने के बारे में क्या? जैसेmigrate_plus.migration.*
निक

@ यह बहुत सुंदर नहीं है, लेकिन एकाधिक हटाने के लिए अपने अन्य प्रश्न पर मेरे समाधान की जाँच करें: drupal.stackexchange.com/questions/214132/…
CR47

यदि आपके पास डेटाबेस तक सीधी पहुंच है, तो configतालिका से बहुत सावधानी से हटने वाली प्रविष्टियों को हटा दें ।
नादिम

30

कॉन्फ़िगरेशन ऑब्जेक्ट को हटाने के लिए ड्रश कमांड drush config-delete <config_name>:।


मल्टी-साइट के मामलों में,drush -l your.site.domain config-delete <config_name>
muskie9

2
छोटा प्रारूप हैdrush cdel <config_name>
शरीक

ध्यान रखें, यदि आप किसी भी कॉन्फिगर को डिलीट करते हैं, तो आपको किसी drush crभी कैश्ड Error: Call to a member function getConfigDependencyKey() on null
कॉन्फिग्रेशन की

13

आप निम्न विधियों का उपयोग कर सकते हैं। निम्नलिखित कोड का उपयोग हुक_इंस्टाइप में करें

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

या

yml फ़ाइल में आप निर्भरताएँ डाल सकते हैं


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

फिर ड्रुपल स्वचालित रूप से आपके मॉड्यूल को अनइंस्टॉल करने पर इस विन्यास को हटा देगा जैसा कि बर्दीर ने यहां बताया है https://drupal.stackexchange.com/a/173879/10436


5
यह शायद हाल ही में बदल गया है, लेकिन यह अब थोड़ा अलग है। निर्भरताएँ: लागू: मॉड्यूल: - yourmodule
hw

1
@ आपकी टिप्पणी बहुत महत्वपूर्ण है। यदि संभव हो तो प्रासंगिक परिवर्तन रिकॉर्ड के लिंक के साथ, इसे उत्तर में जोड़ने पर विचार करें। मैं इसे ढूंढ नहीं सका।
रुडोल्फबाइकर

GAH !! मुझे पता था कि ऐसा करने का एक तरीका था, लेकिन मैं "लागू:" भाग को याद नहीं कर सका। यह ऐसा करने का सबसे सरल, सबसे साफ तरीका है, खासकर जब उन्हें yml फ़ाइलों में बनाते हैं।
UnsettlingTrend

इस दृष्टिकोण का उपयोग करते हुए और मॉड्यूल को स्थापित करने की कोशिश करते हुए, Drupal त्रुटि फेंकता है: मॉड्यूल custom_module को सक्षम नहीं किया जा सकता है क्योंकि यह निम्नलिखित मॉड्यूल पर निर्भर करता है जो नहीं पाया जा सकता है:
जॉन

हाय जॉन, यदि आपने इसे समाप्त नहीं किया है, तो ऐसा लगता है कि आपने अपने मॉड्यूल की निर्भरता को गलत जगह पर रख दिया होगा। इस उत्तर में वर्णित कॉन्फ़िगरेशन का उद्देश्य आपके मॉड्यूल में कॉन्फ़िगरेशन / इंस्टॉल निर्देशिका में वाईएमएल फ़ाइल (ओं) में जाना है। ओपी के मामले में यह उसकी / उसके कॉन्‍फ़िगर / इंस्‍टॉल / field.storage.bloom_stem.bs_twitter_ac.yml फ़ाइल में होगा। ऐसा लगता है जैसे आपने अपने मॉड्यूल के mymodule.info.yml फ़ाइल में निर्भरता डाल दी होगी (जो आपके मॉड्यूल को स्थापित करने से रोक देगा)
डैनियल स्कॉट

9

ड्रुपल कंसोल का उपयोग करना :

$ drupal config:delete 'the_config_to_delete'

1
डॉक्स: इस पर जैसेdrupal config:delete 'migrate_plus.migration.*'
निक सिप

2
नवीनतम ड्रुपल कंसोल में, कॉन्फिगर: डिलीट डिसप्ले को टाइप करने के लिए आपको पहले टाइप करने की उम्मीद है , उदाहरण के लिए drupal config:delete active 'name'या 'ड्रुपल कॉनफिगरेशन: स्टैगिंग' नेम 'को डिलीट करें (केवल एक पैरामीटर सप्लाई के साथ, यह मान लेंगे कि आपने इसे टाइप किया है और आपको प्रॉम्प्ट किया है। विन्यास नाम के लिए।)
विलियम तुरेल

6

Drupal :: configFactory () -> रीसेट () config ऑब्जेक्ट नहीं हटाता है। इस रन के लिएDrupal::configFactory()->getEditable('field.storage.node.your_field_name')->delete()



2

आप सक्रिय कॉन्फ़िगरेशन को हटाने के लिए Drupal कंसोल का उपयोग कर सकते हैं, के साथ drupal config:delete active config_to_delete


1

ड्रश कॉन्फिग-लिस्ट का उपयोग करके सूचीबद्ध सभी कॉन्फ़िगरेशन की खोज करें फिर उस कॉन्फ़िगरेशन की पहचान करें जिसे आप हटाना चाहते हैं। कॉन्फ़िगरेशन ड्रश कॉन्फ़िग-डिलीट को हटाने के लिए नीचे दिए गए कमांड का उपयोग करें


0

मैं यहां एक छोटे (अभी तक थोड़ा अधिक इंजीनियर) पायथन स्क्रिप्ट छोड़ता हूं जो कॉन्फ़िगरेशन बचे हुए को हटा देता है। यह पर निर्भर करता है 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])

इस तरह निष्पादित किया जाना चाहिए:

python ../scripts/batch_config_delete.py -m foobar

1
आप PHP डेवलपर्स से अजगर स्क्रिप्ट का उपयोग करने के लिए कह रहे हैं? थोड़ा मूर्खतापूर्ण लगता है।
पैट्रिक

0

उपयोग में आसान स्थापित मॉड्यूल इस विन्यास मुद्दों से बचने के, इस मॉड्यूल, जबकि एक मॉड्यूल की स्थापना रद्द करने, यह काम करता है, भले ही एक मॉड्यूल के कॉन्फ़िगरेशन शामिल नहीं विन्यास को नष्ट करने की अनुमति देगा से लागू YML में या में नहीं जोड़ा कॉन्फ़िगरेशन वैकल्पिक फ़ोल्डर।

स्थापना रद्द छवि पर विन्यास


0

कस्टम मॉड्यूल से सक्रिय कॉन्फ़िगरेशन की स्थापना रद्द करें

मैं एक ही समस्या में एक कस्टम मॉड्यूल से कॉन्फ़िगर फ़ाइलों की स्थापना रद्द करने की कोशिश कर रहा था। मेरे पास एक कस्टम मॉड्यूल है जो वेबफ़ॉर्म के लिए कस्टम कॉन्फ़िगरेशन फ़ाइलों को पास करने के लिए उपयोग किया जाता है। चूंकि मैं परिपूर्ण नहीं हूं, इसलिए मैं मॉड्यूल को अनइंस्टॉल करने में सक्षम होना चाहता हूं, कोड को संपादित करना और फिर से इंस्टॉल करना। मुझे लगता है कि अगर मैंने अपने कस्टम मॉड्यूल (my_module) को कॉन्फिगरेशन / इंप्लीमेंटेड सेक्शन में कॉन्फिगर / yml फ़ाइल में रेफर किया, जब मैंने अपने मॉड्यूल को अनइंस्टॉल किया तो कॉन्फिगरेशन फाइल्स भी अनइंस्टॉल हो जाएंगी।

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

0

ये सभी उत्तर अंतर्निहित कॉन्फ़िगरेशन ऑब्जेक्ट को सीधे हटाने की सलाह देते हैं, लेकिन सही तरीका यह है कि निकाय को स्टोरेज सिस्टम के माध्यम से हटा दिया जाए।

उदाहरण के लिए, यदि आपके पास ID "बड़े" के साथ एक छवि शैली है और आप इसे हटाना चाहते हैं, तो आपको यह करना चाहिए:

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

इसे इस तरह से करने से, कोर हटाए जाने से पहले "प्रीलीट" को लागू करेगा और कॉन्फ़िगरेशन को हटाए जाने के बाद "हटाएं" हुक को हटा देगा, जो अन्य मॉड्यूल विभिन्न क्लीन अप ऑपरेशन करने के लिए भरोसा कर सकते हैं।


0

जब मॉड्यूल की स्थापना रद्द हो जाती है, तो कॉन्फ़िगरेशन को हटाने के लिए hook_uninstall का उपयोग करें ।

फिर कॉन्फ़िगरेशन हटाएं:

function hook_uninstall() {
  \Drupal::configFactory()->getEditable('the_setting.you.want.to.delete')->delete();
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.