2015-05-09 75 views
7

我有我的項目結構如下所示:PSR-4自動加載致命錯誤:類未找到

src/ 
    ├─ Model/ 
     └─ User.php 

我user.php的文件看起來像這樣:

<?php 
namespace Bix\Model; 

class User { 

而且我composer.json自動加載磁帶機是這樣的:

"autoload": { 
    "psr-4": { 
     "Bix\\": "src/" 
    } 
    } 

最後我bootstrap.php中是這樣的:

use Bix\Model\User; 

// PSR-4 Autoloader. 
require_once "vendor/autoload.php"; 

但是,如果我試圖創建一個new User(),我得到的錯誤Fatal error: Class 'User' not found in /var/www/public/api/v1/index.php on line 8

縱觀作曲家autoload_psr4.php文件,它看起來不錯:

// autoload_psr4.php由作曲家

@generated
$vendorDir = dirname(dirname(__FILE__)); 
$baseDir = dirname(dirname($vendorDir)); 

return array(
    'XdgBaseDir\\' => array($vendorDir . '/dnoegel/php-xdg-base-dir/src'), 
    'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'), 
    'KeenIO\\' => array($vendorDir . '/keen-io/keen-io/src'), 
    'Bix\\' => array($baseDir . '/src'), 
); 

有人可以指出我在哪裏出錯了嗎?

回答

14

首先,Linux(我不確定你使用哪臺PC)區分大小寫。在自動加載中,您定義了src/bix,而它是src/Bix

但更重要的是,在PSR-4中,指定的名稱空間前綴是而不是(包含在目錄結構中以避免只包含一個目錄的目錄)。在你的情況下,如果你配置"Bix\\": "src/",類Bix\Model\User應位於src/Model/User.php


編輯:你誤會PHP命名空間。在PHP中,你並不是說「將所有文件從Bix\Model導入到該文件的全局名稱空間中」,其中use Bix\Model;。相反,這意味着:「此文件中的別名ModelBix\Model」。

所以,你應該做的兩種:

require_once "vendor/autoload.php"; 

use Bix\Model; 

$user = new Model\User(); 

或:

require_once "vendor/autoload.php"; 

use Bix\Model\User; 

$user = new User(); 
+0

我更新了composer.json到這一點: 「比克斯\\」: 「SRC /」 和文件夾結構,這:src/Model/User.php但是在那裏我仍然得到錯誤'class User not found' – JeremyKirkham

+1

@JeremyKirkham在你更新自動加載配置後,你必須運行'composer dump-autoload'來更新自動加載器 –

+0

我已經完成了。我用新的文件夾/結構自動加載器更新了我的問題。 – JeremyKirkham