簡體   English   中英

PSR-0自動加載的問題

[英]Issue with PSR-0 autoloading

我正在嘗試將此組合程序包與正在使用https://packagist.org/packages/activecollab/activecollab-sdk的新項目一起使用。 但是,當我嘗試創建一個新類時,我不斷收到以下錯誤。

Fatal error: Class 'ActiveCollab\Client' not found

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

require "vendor/autoload.php";

new ActiveCollab\Client;

這只是用來測試文件是否正確加載。 我嘗試使用的文件的composer.json看起來像這樣。 而且我覺得問題出在此文件中,但我不知道是什么。

stuff...

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

...stuff

包的文件夾結構

還要查看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'),
);

我已經在自己的一些composer程序包中使用了psr-0,並且除命名空間中的駝峰式情況外,其他一切看起來都是正確的,但我不認為psr-0的php提案中不允許這樣做。

感謝您的幫助,這使我發瘋。

關鍵是:您不能簡單地添加具有隨機自動加載配置的composer.json文件,並希望它能工作-實際上必須匹配您使用的命名方案。 這就是該項目出錯的原因,並且沒有人對其進行測試。 這可能意味着沒有人使用此庫,並且由於缺乏興趣,您可能無法期望創建者提供支持。

但是,讓我們看看他們如何響應我的請求 ,使事情重新恢復正常工作。

作曲家的配置看起來不錯:是否只是在類名中省略了開頭的\\的情況?

new \ActiveCollab\Client;

如果您的代碼位於另一個名稱空間中,則將需要它,因為它將相對於當前名稱空間進行加載。

編輯:我剛剛簽出了該庫,即使進行了上述修復,自動裝帶器也無法正常工作。 由於庫的composer.json文件指定了PSR0自動加載器,但使用了“ .class.php”擴展名(與PSR0不兼容),因此自動加載器也可能損壞。 該庫包含一個autoload.php文件,因此,如果僅require該文件,則應該可以使用這些類:

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

完成此操作后,我就可以使用該類了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM