इंटरफ़ेस घोषित नहीं कर सकता, क्योंकि नाम पहले से ही उपयोग में है


12

मेरे नए मॉड्यूल में एक सरल इंटरफ़ेस बनाने के बाद। मैंने बिन / मैगेंटो सेटअप में टाइप किया: di: संकलन, और मुझे यह कहते हुए एक त्रुटि मिलती है कि नाम पहले से ही उपयोग में है।

यहाँ मेरा कोड है:

namespace Company\Test\Api;

/*
 *  @api
 */
interface XyzInterface {
    public function getSomething();
}

तब मुझे यह त्रुटि मिलती है:

Repositories code generation... 1/7 [====>-----------------------]  14% 2 secs 52.0 MiBPHP 
Fatal error:  Cannot declare interface Company\Test\Api\XyzInterface, because the name is already in use in .../app/code/Company/Test/Api/XyzInterface.php on line 13

लाइन "इंटरफ़ेस XyzInterface" है मुझे यकीन नहीं है कि मैं क्या गलत कर रहा हूं।


1
क्या आप स्टैक ट्रेस देखने के लिए -vvv विकल्प के साथ कमांड चला सकते हैं? फ़ाइल किसी कारण से दो बार शामिल हो सकती है।
बुस्कामुज़ा 5

यह सिर्फ "PHP घातक त्रुटि" दिखाता है
नेली

आप xdebug को सक्षम करने का भी प्रयास कर सकते हैं। मुझे लगता है कि बैकट्रेस को प्रदर्शित करने में मदद करनी चाहिए।
बुस्कामुज़ा जूला

1
मुझे यह त्रुटि "गलत नाम" वर्ग के कारण भी मिली थी
Ansyori

जवाबों:


36

आज मुझे उसी प्रकार की त्रुटि मिली:

PHP घातक त्रुटि: वर्ग \ _ \ _ \ _ वर्ग की घोषणा नहीं कर सकता, क्योंकि नाम पहले से ही लाइन में /var/www/m2/magento2/app/code/path/to/the/class.php में उपयोग किया जा रहा है

जहां लाइन 100 फ़ाइल का अंत है।

डिबगिंग के लगभग 4 घंटे बाद मुझे वास्तव में कारण पता चलता है: नेमस्पेस घोषणा में गलतफहमी। अंतिम क्षण तक मुझे विश्वास नहीं हुआ कि यह नामों की घोषणा में एक टाइपोग्राफिक त्रुटि है, लेकिन जब मैंने सभी नामों को नए सिरे से लिखा है - तो गलती गायब हो गई है। यह लेख बहुत उपयोगी था:

मैं थोड़ी देर के लिए अपना सिर खुजलाऊंगा, आश्चर्य होगा कि क्या हो रहा है, और आखिरकार यह एहसास हुआ कि यह है

Pulsetorm

यानी मैंने एक नाम स्थान का नाम गलत लिखा है, और जब प्रारंभिक ऑटोलॉड्स वर्ग फ़ाइल को लोड करता है, तो उसने उस वर्ग को परिभाषित नहीं किया होगा जिसे वह ढूंढ रहा है, और फिर एक दूसरा ऑटोलैडर (संगीतकार का आमतौर पर) उसे फिर से लोड करता है, और उसी को फिर से परिभाषित करने की कोशिश करता है। गलत वर्ग।

यानी, मैगेंटो वर्ग चाहता था

Pulsestorm\Helloworld\Observers\Block

लेकिन मैंने परिभाषित किया

Pulsetorm\Helloworld\Observers\Block

गलत नाम स्थान के लिए धन्यवाद।

धन्यवाद, एलन स्टॉर्म :)

अपडेट करें:

उस त्रुटि का एक अन्य प्रकार गलत नाम स्थान के लापता भाग के साथ नामकरण घोषणा है, जैसा कि इस उदाहरण में है:

त्रुटि:

रिपोजिटरी कोड पीढ़ी ... 1/7 [====> -----------------------] 14% 1 सेकंड 50.0 MiBPHP घातक त्रुटि: घोषित नहीं कर सकता वर्ग माइग्रेशन \ Step \ Version11410to2000Test, क्योंकि नाम पहले से ही /var/www/vhosts/rwld/vendor/magento/data-migration-tool/tests/unests/testsuite/Mep/UrlRewrite/Version11410to2000estest में उपयोग में है। लाइन 109

जहां लाइन 109 फाइल का अंत है।

फ़ाइल में vendor/magento/data-migration-tool/tests/unit/testsuite/Migration/Step/UrlRewrite/Version11410to2000Test.phpहमें नामस्थान मिला Migration\Stepजब सही नामस्थान होना चाहिए Migration\Step\UrlRewriteक्योंकि इस वर्ग के लिए रास्ता है Migration/Step/UrlRewrite। नाम स्थान को बदलने के बाद Migration/Step/UrlRewriteत्रुटि हो गई है।


1
मेरे पास एक ही मुद्दा था, यह पागल मुद्दा है
हमजा अलायद

नाम स्थान समस्या के लिए +1। मैंने 2 घंटे बर्बाद किए हैं। आपका बहुत बहुत धन्यवाद!
wezzy

1
इसके अलावा बस इसे जोड़ना चाहते हैं, अपनी निर्देशिकाओं का नामकरण के दौरान अतिरिक्त सावधानी बरतें क्योंकि आवरण को मेल खाना चाहिए - यह भी एक और दो घंटे बर्बाद हो सकता था!
स्मिती
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.