簡體   English   中英

Composer不會自動加載我的自動加載器類

[英]Composer is not autoloading my autoloader class

因此,我最近在composer.json文件中包含了一個私有軟件包,並且運行良好。 根據需要,它克隆了我的BitBucket存儲庫的項目。 但是,我在自動加載包類時遇到了問題。

如果我在Silex項目的控制器中手動添加自動裝帶器,則效果很好。

require_once('/var/www/vendor/my-vendor/my-private-package/autoload.php');

但是,如果我不添加autoload.php類,則會收到未找到類的錯誤:

18/02/07 17:05:33 [error] 1174#0: *1187 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught Error: Class 'Swagger\Client\Api\MyPHPClientApi' not found in /vagrant/public/personal-project/src/App/Frontal/Controller/MyController.php:88
Stack trace:
#0 /vagrant/public/personal-project/vendor/symfony/http-kernel/HttpKernel.php(151): App\Frontal\Controller\SleepingPlaceController->showList()
#1 /vagrant/public/personal-project/vendor/symfony/http-kernel/HttpKernel.php(68): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1)
#2 /vagrant/public/personal-project/vendor/silex/silex/src/Silex/Application.php(496): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#3 /vagrant/public/personal-project/vendor/silex/silex/src/Silex/Application.php(477): Silex\Application->handle(Object(Symfony\Component\HttpFoundation\Request))
#4 /vagrant/public/personal-project/web/index.php(10): Silex\Application->run()
#5 {main}

那我在做什么錯?

我的私有軟件包的composer.json看起來像這樣:

{
    "name": "my-vendor/my-private-package",
    "description": "",
    "keywords": [
        "swagger",
        "php",
        "sdk",
        "api"
    ],
    "homepage": "http://swagger.io",
    "license": "proprietary",
    "authors": [
        {
            "name": "Swagger and contributors",
            "homepage": "https://github.com/swagger-api/swagger-codegen"
        }
    ],
    "require": {
        "php": ">=5.4",
        "ext-curl": "*",
        "ext-json": "*",
        "ext-mbstring": "*"
    },
    "require-dev": {
        "phpunit/phpunit": "~4.8",
        "satooshi/php-coveralls": "~1.0",
        "squizlabs/php_codesniffer": "~2.6",
        "friendsofphp/php-cs-fixer": "~1.12"
    },
    "autoload": {
        "psr-4": { "Swagger\\Client\\" : "lib/" }
    },
    "autoload-dev": {
        "psr-4": { "Swagger\\Client\\" : "test/" }
    }
}

私有軟件包中的類在lib /子目錄下。

順便說一下,此客戶端是由Swagger編輯器在線工具https://editor.swagger.io/自動生成的

您在這里在作曲家中覆蓋了根名稱空間:

"autoload": {
  "psr-4": { "Swagger\\Client\\" : "lib/" }
}

注意您的錯誤: Uncaught Error: Class 'Swagger\\Client\\Api\\MyPHPClientApi' not found

Composer將依賴項安裝在vendor文件夾中,但您要告訴它在lib文件夾中找到Swagger\\Client\\命名空間。

假設您的私有倉庫遵循PSR-4(由於您使用的是PSR-4自動加載器,因此可以放心假設),您只需要在作曲家中刪除這一行,然后再次生成作曲家自動加載器composer dump-autoloader )。

暫無
暫無

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

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