2014-12-18 29 views
7

Başlık kendisi konuşuyor. Yani burada benim proje yapısı şöyledir:PHP Composer Autoloader Sınıf bulunamadı Exception

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

MySQL.php dosyası:

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

index.php ve start.php dosyalar:

//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. 
?> 

Ve nihayet composer.json özdevinimli_yükle parçası :

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

Sorun nerede? Bu durumla baş etmeye çalışmaktan gerçekten yoruldum. Lütfen yardım edin arkadaşlar! Teşekkürler.

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

veya

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

sağ use deyimi olarak zaten PSR, söz kullanmayan bir yana

cevap

17

Sen bir sınıf başlatılıyor ad içermesi gerekir -4 bu şekilde çalışmıyor. Bu bir takma addır. Esasen src'un Database'a eşit olduğunu söylüyorsunuz. Yani, Database adında bir dizinin olması için, tam olarak nitelenmiş ad alanı + sınıfının 'Veritabanı \ Veritabanı \ Çekirdek \ MySQL' olduğuna eşittir. Bu durumda PSR-0'ı kullanmak veya PSR-4 tanımınızı ayarlamak istersiniz.

+1

Teşekkür ederim Gerçekten minnettarım ama düşük itibara bağlı olarak oy veremiyorum :) – lostbyte

+0

Size oy vermeme izin verin :) –

4
+0

Bu iyi cevap üzerinde biraz genişletmek için: ad alanınızın bir şey olmasını istemezsiniz "Veritabanı" gibi jenerik. Başka bir php paketinin kullanamayacağı bir şey kullanmak istiyorsanız, şirketinizin/kuruluşunuzun adı iyi bir seçimdir, örn. Şirketinize Acme Baseball Cards isminde, iyi bir isim "AcmeBaseball" olabilir. Mysql.php dosyanızda ad alanı AcmeBaseball \ Database \ Core; 've composer.json' 'psr-4 '' olacaktır:“ AcmeBaseball \\ ”:“ src/”' Bunu fark edeceksiniz. AWS Php SDK gibi bir besteci paketi kurmak; compser.json'unu açın ve ad alanı "Aws" dır – KayakinKoder

İlgili konular