web-dev-qa-db-ja.com

PHP Composerオートローダークラスが見つかりません例外

タイトルはそれ自体を物語っています。これが私のプロジェクト構造です:

|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": {
    "psr-4": "Database\\": "src/" // Also tried "src/Database" too
}

問題はどこだ?私はこの状況に対処しようとするのに本当にうんざりしています。みんな助けてください!ありがとう。

8
lostbyte

クラスを初期化するときに名前空間を含める必要があります。

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

または

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

名前空間の使用:エイリアシング/インポート を参照してください。

19
Populus

すでに述べたように正しいuseステートメントを使用しないことを除けば、PSR-4はそのようには機能しません。それはもっとエイリアスです。あなたは本質的にsrcDatabaseに等しいと言っています。したがって、そこにDatabaseという名前のディレクトリがあるということは、完全修飾名前空間+クラスが 'Database\Database\Core\MySQL`に等しいことを意味します。この場合、PSR-0を使用するか、PSR-4の定義を調整します。

6
alcohol