2014-12-18 17 views
7

Tytuł mówi sam. Więc tutaj jest mój struktury projektu:Nie można odnaleźć klasy kompresora PHP Autoloader Wyjątek

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

plik MySQL.php:

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

index.php i start.php pliki:

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

i wreszcie moja część composer.json autoload :

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

Gdzie jest problem? Naprawdę jestem zmęczony próbowaniem poradzenia sobie z tą sytuacją. Proszę, pomóżcie! Dzięki.

Odpowiedz

17

Musisz zawierać nazw podczas inicjalizacji klasy:

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

lub

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

Zobacz Using namespaces: Aliasing/Importing

+1

Dzięki, jestem naprawdę wdzięczny, ale nie mogę głosować ze względu na niską reputację :) – lostbyte

+0

Pozwól mi zagłosować za Ciebie :) –

4

Oprócz nie za pomocą instrukcji prawo use jak już wspomniano, PSR -4 nie działa w ten sposób. To raczej alias. Zasadniczo mówisz, że src jest równy Database. Tak więc posiadanie katalogu o nazwie Database oznaczałoby, że w pełni kwalifikowana przestrzeń nazw + jest równa "Baza danych \ Baza danych \ Rdzeń \ MySQL". W tym przypadku chcesz użyć PSR-0 lub dostosować swoją definicję PSR-4.

+0

Aby rozwinąć nieco na tej dobrej odpowiedzi: nie chciałbyś, aby Twoja przestrzeń nazw była czymś ogólny jak "Baza danych". Chcesz użyć czegoś, czego nie może już używać żaden inny pakiet php, więc nazwa firmy/organizacji jest dobrym wyborem, np. jeśli twoja firma nazywa się Acme Baseball Cards, dobrym obszarem nazw może być "AcmeBaseball". W twoim pliku Mysql.php przestrzeni nazw będzie "przestrzeń nazw AcmeBaseball \ Database \ Core;" oraz w composer.json '" psr-4 ":" AcmeBaseball \\ ":" src/"' Zauważysz to, jeśli zainstaluj pakiet kompozytorowy, taki jak AWS Php SDK; otwórz ich compser.json, a przestrzeń nazw to 'Aws' – KayakinKoder

Powiązane problemy