2013-05-06 17 views
8

के लिए Autoloads उत्पन्न नहीं कर रहा है मैंने दो परियोजनाओं, एक 'init' और एक पुस्तकालय स्थापित किया है, जो init द्वारा आवश्यक है। दोनों में पीएसआर -0 ऑटोलोड्स सेट हैं, लेकिन लाइब्रेरी से ऑटोलोड लोड मूल्य इनिट प्रोजेक्ट में विक्रेता/संगीतकार/autoload_namespaces.php में नहीं जोड़े जाते हैं। लाइब्रेरी सेसंगीतकार लाइब्रेरी

नमूना composer.json: परियोजना से

{ 
    "name": "lxp/library", 
    "description": "A test library", 
    "autoload": { 
     "psr-0": { 
      "LXP\\Library": "src/" 
     } 
    }   
} 

नमूना composer.json कि कि पुस्तकालय की आवश्यकता है:

{ 
    "name": "lxp/init", 
    "name": "A test init", 
    "autoload": { 
     "psr-0": { 
      "LXP\\Init": "src/" 
     } 
    }, 
    "repositories": [ 
     { 
      "type": "composer", 
      "url": "http://satis.repo.redacted/" 
     } 
    ], 
    "require": { 
     "lxp/library": "dev-master" 
    } 
} 

पुस्तकालय में वर्ग LXP \ लाइब्रेरी \ कुछ होता है फ़ाइल स्रोत/एलएक्सपी/लाइब्रेरी/Something.php।

प्रोजेक्ट जिसमें लाइब्रेरी की आवश्यकता है, में फ़ाइल स्रोत/LXP/Init/Now.php में कक्षा LXP \ Init \ Now शामिल है।

जब संगीतकार 'init' परियोजना में स्थापित चल रहा है, यह पुस्तकालय परियोजना डाउनलोड करता है और सही ढंग से विक्रेता में कहते हैं, लेकिन विक्रेता/संगीतकार/autoload_namespaces.php लाइब्रेरी की autoload जानकारी, शामिल नहीं है केवल यह है कि वर्तमान परियोजना के ।

मैं क्या गलत कर रहा हूं? यदि मैं लाइब्रेरी प्रोजेक्ट में डंप-ऑटोलोड लोड करता हूं तो autoload_namespaces.php फ़ाइल सही है, और एक त्वरित बूटस्ट्रैप स्क्रिप्ट पुष्टि करता है कि यह वास्तव में कक्षा को उठाता है।

संपादित करें - यह सैटिस से उत्पन्न संकुल.जेसन के साथ एक समस्या है। इसे ठीक करने के लिए, मुझे लाइब्रेरी के संगीतकार.जेसन से जेएसओ फाइल में ऑटोलोड लोड जानकारी जोड़नी पड़ी जो मैं सैटिस को आपूर्ति करता हूं, जो एक अनावश्यक नकल की तरह लगता है और इसलिए मैं इसे गलत कर रहा हूं। क्या कोई ऐसी जगह है जो सैटिस पुस्तकालयों के लिए जानकारी को स्वत: लोड कर सकती है? उदाहरण के लिए, क्या सैटिस composer.json फ़ाइलों को पढ़ सकते हैं जो पुस्तकालयों में मौजूद हैं जो स्कैन करते हैं?

संपादित करें # 2 - सैटिस 'पैकेज' प्रकार के रूप में निर्दिष्ट भंडारों से संगीतकार.जेसन को नहीं पढ़ता है। यह हिंडसाइट में स्पष्ट है, क्योंकि 'पैकेज' का उपयोग उन पुस्तकालयों के लिए किया जाता है जिनके पास कंपोज़र.जेसन नहीं है, और उनके चारों ओर संगीतकार जैसी निर्भरता प्रबंधन को लपेटने का एक तरीका है।

'vcs' प्रकार में satis.json की रिपॉजिटरी को बदलना मतलब था कि composer.json पढ़ा गया था, और जानकारी (ऑटोलोड लोड विनिर्देश सहित) को parsed और packages.json में संग्रहीत किया गया था।

@ सेल्डेक - यह सुझाव देने के लिए धन्यवाद कि मेरी सैटिस कॉन्फ़िगरेशन समस्या थी, और मुझे उम्मीद है कि यह मेरी स्थिति में किसी और के लिए सती/संगीतकार व्यवहार को स्पष्ट करता है।

उत्तर

5

मैं दो संभावित गलतियों को देखने के क्या किया है हो सकता है कि इस का कारण होगा:

  • आप अपने काफ़ी रेपो अद्यतन करने के लिए भूल गया तो LXP/init के लिए autoload config नहीं तारीख तक में वहाँ
  • है आप लॉक फ़ाइल से संगीतकार स्थापित कर रहे हैं, और इसका मतलब है कि संगीतकार सिर्फ composer.lock फ़ाइल से जानकारी पढ़ता है और सैटिस में उपलब्ध नवीनतम संस्करण में पैकेज मेटाडेटा अद्यतन नहीं करता है। इसे हल करने के लिए आपको संगीतकार को अपडेट करना चाहिए।
+0

@Seladek - मेरी काफ़ी-उत्पन्न packages.json किसी भी autoload जानकारी शामिल नहीं है, यह माना जाता है? लाइब्रेरी की ऑटोलोड जानकारी को जोड़ा जाने के बाद से इसे पुन: उत्पन्न किया गया है। चूंकि यह एक टेस्टबेड प्रोजेक्ट है, मैं पूरी तरह से रनों के बीच संगीतकार को फाड़ रहा हूं, संगीतकार.लॉक और विक्रेता निर्देशिका को हटा रहा हूं और संगीतकार पुनः स्थापित कर रहा हूं। – bmcgavin

+0

@ सेलेडेक - हालांकि, मैं पुष्टि कर सकता हूं कि सीधे autoload जानकारी को संकुल में जोड़ना। जेसन का वांछित प्रभाव पड़ा है। अब मूल प्रश्न को संपादित करना। – bmcgavin

+1

मुझे लगता है कि अब जवाब इस बात पर निर्भर करता है कि आपने सैटिस को कैसे कॉन्फ़िगर किया था। यदि आपने "टाइप": "पैकेज" का उपयोग किया है, तो शायद आपको नहीं करना चाहिए, क्योंकि इसका उपयोग केवल उस कोड के साथ किया जाना चाहिए जिसमें composer.json नहीं है। यदि ऐसा होता है तो आपको इसके बजाय "vcs" प्रकार का उपयोग करना चाहिए, फिर यह गिट रेपो के composer.json को स्कैन करेगा और जेनरेट किए गए संकुल में ऑटोलोड लोड जानकारी को सही तरीके से शामिल करेगा। जेसन – Seldaek

2

composer dump-autoload आदेश का प्रयास करें।

0

यह निर्भर करता है कि आप संगीतकार के माध्यम से अपनी लाइब्रेरी कैसे स्थापित करते हैं।उदाहरण के लिए यदि आप इसे package प्रकार के रूप में डाउनलोड कर रहे हैं (जैसा कि मैं composer प्रकार के साथ विश्वास करता हूं), संगीतकारcomposer.json को कभी नहीं पढ़ता है, तो आपको इसके बजाय vcs प्रकार का उपयोग करने की आवश्यकता है। देखें: GH-6846

{ 
    "require": { 
    "lxp/library": "dev-master" 
    }, 
    "repositories": [ 
    { 
     "type": "vcs", 
     "url": "http://satis.repo.redacted/" 
    } 
    ] 
} 

तब चलाएँ::

यहाँ composer.json जो काम करना चाहिए है composer install

  • composer dump-autoload -o -vvv:

    समस्या निवारण के लिए, चलाने की कोशिश करें।

  • composer diagnose -vvv