silex

2012-07-21 9 views
6

पर एक लाइब्रेरी जोड़ें मुझे पता है कि यह प्रश्न पहले से ही पूछा जा चुका है, लेकिन ऐसा लगता है कि ऑटोलोडिंग प्रक्रिया संगीतकार के साथ थोड़ी सी बदल गई है।silex

मैं बस अपने साइलेक्स प्रोजेक्ट में एक क्लास लाइब्रेरी जोड़ना चाहता हूं।

तो मैं इस फ़ाइल बनाया: विक्रेता \ lib \ picture.php

<?php 
namespace MyNamespace; 

class Picture 
{ 
    function testage() 
    { 
     echo 'hihaaa ça marche'; exit; 
    } 
} 

विक्रेता/संगीतकार/autoload_namespaces.php में, मैं बड़ा सरणी के लिए इस लाइन कहा:

'MyNamespace' => $vendorDir . '/lib/', 

और मुख्य फ़ाइल में मैंने जोड़ा:

use MyNamespace\Picture as Picture; 

और इसे इस तरह कहा जाता है:

$app->register(new Picture()); 

जो मुझे इस त्रुटि देता है:

Fatal error: Class 'MyNamespace\Picture' not found... 

मैं सिर्फ कमांड लाइन के बिना, एक वर्ग है कि मैं किसी भी नियंत्रक, आसानी से उपयोग कर सकते हैं जोड़ने के बारे में (मैं का उपयोग नहीं करते पता नहीं है संगीतकार, मैंने silex preconfigured डाउनलोड किया), कोई विचार?

उत्तर

12

यदि आप संगीतकार का उपयोग कर रहे हैं तो आपको विक्रेता निर्देशिका नहीं बदलनी चाहिए। आपको इसमें फाइलें नहीं जोड़नी चाहिए, और आपको संगीतकार द्वारा जेनरेट की गई फ़ाइलों को संशोधित नहीं करना चाहिए।

मैं आपको उन कक्षाओं को src निर्देशिका में रखने की सलाह देता हूं। @gunnx दिखाता है कि आप composer.json में ऑटोलोडिंग को कॉन्फ़िगर कैसे कर सकते हैं, ताकि जब भी आप composer install चलाते हैं तो यह फिर से उत्पन्न हो जाता है।

फ़ाइल src/MyNamespace/Picture.php में होगी। composer.json में autoload config होगा:

{ 
    "autoload": { 
     "psr-0": { "MyNamespace": "src/" } 
    } 
} 

वास्तविक समाधान दो पिछले जवाब का एक संयोजन है। लेकिन मुझे लगता है कि विवरण सही प्राप्त करना महत्वपूर्ण है ;-)।

+1

अपने प्रश्न के अंत में वह स्पष्ट रूप से कहता है कि वह संगीतकार का उपयोग नहीं कर रहा है। – Maerlyn

+0

Thx @igorw! "Src /" डालने से यह मेरे लिए काम करता है! =) (हालांकि मुझे आश्चर्य है क्यों) –

2

आपकी पिक्चर क्लास इस फ़ाइल में होना चाहिए: vendor/lib/MyNamespace/Picture.php। पूर्ण नामस्थान और आवरण नोट करें।

+0

धन्यवाद, आपका उत्तर वास्तव में मदद कर रहा है। मैं ServiceProviderInterface को लागू करने और बूट जोड़ने और विधियों को पंजीकृत करने के लिए भी जोड़ता हूं, और अब मुझे कोई त्रुटि नहीं है। – Vilrouge

+0

अगर मेरे उत्तर ने आपकी समस्या हल की है, तो कृपया इसे स्वीकार करें। – Maerlyn

2

आप अपने composer.json उदा के लिए निम्न जोड़कर autoloader के लिए अपने स्वयं के कोड जोड़ सकते हैं

{ 
"autoload": { 
    "psr-0": {"Acme": "src/"} 
}