2014-12-18 8 views
7

शीर्षक स्वयं बोलता है। तो यहाँ अपने प्रोजेक्ट संरचना होती है:PHP संगीतकार ऑटोलोडर क्लास नहीं मिला अपवाद

|src 
    |Database 
     |Core 
      |MySQL.php 
     |Support 
    start.php 
|vendor 
composer.json 
index.php 

MySQL.php फ़ाइल:

<?php 
namespace Database\Core; 
//Some methods here 

index.php और start.php फ़ाइलें:

//start.php file 
<?php 
require __DIR__ . '/../vendor/autoload.php'; 
?> 

//index.php file 
<?php 
use Database\Core; 
require __DIR__ . '/src/start.php'; 

$mysql = new MySQL(); // Gets exception Class 'MySQL' cannot found etc. 
?> 

और अंत में मेरी composer.json autoload हिस्सा :

"autoload": { 
    "psr-4": "Database\\": "src/" // Also tried "src/Database" too 
} 

कहाँ समस्या है? मैं इस स्थिति से निपटने की कोशिश करने के लिए वास्तव में थक गया हूँ। कृपया लोगों की मदद करो! धन्यवाद।

उत्तर

17

आप नाम स्थान है जब आप एक वर्ग आरंभ कर रहे हैं शामिल करने की जरूरत:

$mysql = new Database\Core\MySQL(); 

या

use Database\Core\MySQL; 
$mysql = new MySQL(); 

एक तरफ Using namespaces: Aliasing/Importing

+1

धन्यवाद मैं वास्तव में आभारी हूं लेकिन कम प्रतिष्ठा के कारण वोट नहीं दे सकता :) – lostbyte

+0

मुझे आपके लिए वोट दें :) –

4

देखें सही use बयान के रूप में पहले ही उल्लेख किया, PSR का उपयोग नहीं कर से -4 ऐसा काम नहीं करता है। यह उपनाम का अधिक है। आप अनिवार्य रूप से कह रहे हैं कि srcDatabase के बराबर है। तो Database नाम की एक निर्देशिका रखने के लिए वहां बताया जाएगा कि पूरी तरह से योग्य नामस्थान + वर्ग 'डेटाबेस \ डेटाबेस \ कोर \ MySQL` के बराबर है। आप इस मामले में पीएसआर -0 का उपयोग करना चाहते हैं, या अपनी पीएसआर -4 परिभाषा समायोजित करना चाहते हैं।

+0

इस अच्छे उत्तर पर थोड़ा विस्तार करने के लिए: आप नहीं चाहते हैं कि आपका नामस्थान कुछ हो सामान्य "डेटाबेस" की तरह। आप ऐसा कुछ उपयोग करना चाहते हैं जो कोई अन्य php पैकेज पहले से उपयोग नहीं कर सकता है, इसलिए आपकी कंपनी/संगठन का नाम एक अच्छा विकल्प है, उदा। अगर आपकी कंपनी को एमेम बेसबॉल कार्ड नाम दिया गया है, तो एक अच्छा नामस्थान "AcmeBaseball" हो सकता है। आपकी MySQL.php फ़ाइल में नामस्थान 'नेमस्पेस AcmeBaseball \ डेटाबेस \ Core;' और composer.json '" psr-4 "में होगा:" AcmeBaseball \\ ":" src/"' अगर आप इसे देखेंगे एडब्ल्यूएस पीएचपी एसडीके जैसे संगीतकार पैकेज को स्थापित करें; उनके compser.json खोलें और नामस्थान 'Aws' है – KayakinKoder

संबंधित मुद्दे