2014-06-11 74 views
0

我正在嘗試將這個作曲包與我正在使用的新項目https://packagist.org/packages/activecollab/activecollab-sdk配合使用。但是,當我嘗試創建一個新班級時,我不斷收到以下錯誤。PSR-0自動加載問題

Fatal error: Class 'ActiveCollab\Client' not found 

引發此錯誤的文件如下所示。

require "vendor/autoload.php"; 

new ActiveCollab\Client; 

這只是用來測試文件是否被正確加載。我嘗試使用的文件的composer.json看起來像這樣。我有一個感覺問題是在這個文件中,但我無法弄清楚什麼。

stuff... 

"autoload": { 
     "psr-0": { 
     "ActiveCollab\\": "ActiveCollab" 
     } 
    } 

...stuff 

Folder structure of package

而且看它被這樣產生的autload_namespaces.php文件。

<?php 

// autoload_namespaces.php @generated by Composer 

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

return array(
    'ActiveCollab' => array($vendorDir . '/activecollab/activecollab-sdk/ActiveCollab'), 
); 

我已經使用PSR-0我自己,一切的一些作曲家的包看起來是可能除了在命名空間中的駱駝情況下正確的,但我不認爲這是在PHP提案PSR被禁止-0。

感謝任何幫助,這一直使我瘋狂。

+0

我不確定這一點,但根據psr0沒有一個類的文件名必須是ClassName.php。所以使用ClassName.class.php可能違反了這個? – echochamber

回答

1

事情是:你不能簡單地添加一個composer.json文件與隨機自動加載配置,並希望它的作品 - 它實際上必須符合你使用的命名方案。這就是這個項目出錯了,沒有人測試過它。這可能意味着沒有人使用這個庫,並且由於缺乏興趣,您可能不希望創作者提供支持。

但讓我們看看他們如何對my pull request做出反應,讓事情重新恢復正常。

+0

太棒了,非常感謝。我試圖做你所做的事情,但是我對psr-0標準有一點誤解,認爲你的代碼已經爲我清理了。 – mschuett

+0

維護者對這個問題做出了很快的反應,並用帶標籤的1.0.3版解決了這個問題。你應該簡單地更新和完成。 – Sven

+0

對於其他人看這個。除了Sven的改變之外,這位作曲家也有錯誤的道路。json文件它被設置爲「ActiveCollab」:「ActiveCollab」,我認爲它不符合映射時的命名約定,因爲您不再將包名稱包含在use語句中。而是將其切換到「ActiveCollab」:「/」,一切都按預期工作。再次感謝所有幫助斯文。 – mschuett

0

作曲家的配置看起來很好:是不是從你的班級名稱中省略了前導\?

new \ActiveCollab\Client; 

你需要,如果你的代碼是另一個命名空間中,因爲它會相對於當前的命名空間加載它。

編輯:我剛剛檢查出該庫,甚至與上述修復,自動裝載機是不是很工作。自動裝帶器也可能因爲指定PSR0自動加載器的庫文件的composer.json文件而中斷,但使用「.class.php」擴展名(不兼容PSR0)。一個autoload.php文件包含在庫中,所以如果你只是require這個文件,你應該能夠使用的類:

require 'vendor/activecollab/activecollab-sdk/ActiveCollab/autoload.php';

這樣做後,我能夠使用的類。