在 laravel 5 app.php 中使用自动加载 psr-4 定义的命名空间给出未找到错误

namespace defined in autoload psr-4 using in laravel 5 app.php giving not found error

把我的脑袋卡在了一些 errors.i 不明白我犯错的地方。 我正在使用 laravel 5 并安装了 it.I 想要使用 l5-repository 所以我安装了 https://github.com/prettus/l5-repository 这个存储库使用 composer commnad:

composer require prettus/l5-repository

并且我根据安装文档进行了所有更改并且工作正常。

使用 composer 安装存储库后,我的目录结构如下:

curovis
|-- composer.json
|-- composer.lock
|-- app
|-- bootstarp
|-- config
|-- database
`-- vendor
    |-- composer
    `-- prettus
        `-- l5-repository
            |-- src
            |   `-- Prettus
            |       `-- Repository
            `-- composer.json

在此之后,根据文档,我在 /var/www/curovis/config/app.php 中进行了以下输入: Prettus\Repository\Providers\RepositoryServiceProvider::class, 并且工作正常。 现在我想改变根目录条目的 composer.json 如下:

"autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\": "app/",
            "Prettus\Repository\": "vendor/prettus/l5-repository/src/Prettus"
        }
    },

并使用 composer update 命令。它也可以正常工作。 现在我想用另一个名字使用相同的 repo,所以我用 follwing 更改了 composer.json:

"autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\": "app/",
            "RepoTest\Repository\": "vendor/repotest/l5-repository/src/RepoTest"
        }
    },

并在app.php file.run composer update命令中添加RepoTest\Repository\Providers\RepositoryServiceProvider::class,。然后它给出以下错误:

FatalErrorException in /var/www/curovis/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php line 146: Class 'RepoTest\Repository\Providers\RepositoryServiceProvider' not found

我无法理解为什么 laravel 正在寻找 /var/www/curovis/vendor/laravel/framework/src 这条路径,而不是 composer.json 中提供的 "RepoTest\Repository\": "vendor/repotest/l5-repository/src/RepoTest"。 是我遗漏的任何东西或作曲家的任何错误。 感谢您的帮助。

您永远不会为您添加到主 composer.json 中的包添加自动加载。路径 "vendor" 不应该出现在那里。

我知道您正在尝试添加一个包,然后修改它并改用它。您将自动加载前缀从 "Prettus" 更改为 "RepoTest",但是您是否还更改了 PHP 文件中的名称空间?简单地重命名路径不会影响 PHP class 名称和命名空间,因此如果您重命名文件,并且在该文件中没有定义匹配的 class,自动加载将失败。

无论你想做什么,我认为最好问一下这个问题,而不是因为你解决原始问题的方式而要求解决你认为必要的问题。如果您想知道如何修改现有项目并使用它的变体:询问它。

通过更改作曲家条目解决了上述错误: 当我看到 /vendor/composer/ 文件夹的 autoload_classmap.phpautoload_psr4.php 文件时 autoload_classmap.php 文件不包含我需要的命名空间。 所以我在 composer.json:

中做了以下更改
"autoload": {
        "classmap": [
            "database","vendor/repotest/src/Repotest/Repository/"
        ],
        "psr-4": {
            "App\": "app/",
            "Repotest\Repository\": "vendor/repotest/src/Repotest/Repository/"
        }
    },

因此,通过在 "classmap": 中输入,在 autoload_classmap.php 中输入,现在工作正常。 感谢@sven 的帮助。

示例:

"autoload": {
    "classmap": [
        "database"
    ],
    "files": [
        "app/helper.php"
    ],
    "psr-4": {
        "App\": "app/"
    }
}

要加载的默认 Composer 文件。