【问题标题】:Class of laravel package not found找不到 laravel 包的类
【发布时间】:2017-09-16 15:37:46
【问题描述】:

我用这个composer.json做了一个laravel包:

{
    "name": "calcanotica/file-storage",
    "type": "library",
    "description": "A file storage module for laravel.",
    "homepage": "<<gitlab url>>",
    "authors": [
        {
            <<authors>>
        }
    ],
    "autoload": {
        "psr-4": { "Calcanotica": "src" }
    },
    "require": {
        "php": "^5.5.9 || ^7.0",
        "illuminate/contracts": "5.1.* || 5.2.* || 5.3.* || 5.4.*",
        "illuminate/support": "5.1.* || 5.2.* || 5.3.* || 5.4.*",
        "league/flysystem-aws-s3-v3": "~1.0",
        "nesbot/carbon": "^1.0"
    }
}

包的结构是:

-src
   -Storage
      -S3FileStorage.php

S3FileStorage.php 文件中,我有以下类:

namespace Calcanotica\Storage;

class S3FileStorage { ... }

但是,当我尝试在另一个应用程序中将类用作 \Calcanotica\Storage\S3FileStorage 时,我收到了 Class \Calcanotica\Storage\S3FileStorage not found 错误。

我已经执行了composer dump-autoload

有什么问题?

【问题讨论】:

标签: php laravel composer-php autoload


【解决方案1】:

您的autoload 部分不正确。命名空间必须以 \\ (docs) 结尾,所以它应该是:

"autoload": {
    "psr-4": { "Calcanotica\\": "src" }
},

但是我会替换整个

"autoload": {
    "psr-4": { "Calcanotica": "src" }
},

"autoload": {
    "classmap": [ "src/" ]
},

让作曲家找出什么在哪里(docs),通常使用它比手动设置命名空间映射更好,更不容易出错,并且如果您将新命名空间添加到您的包中,则不需要任何未来的关注.

【讨论】:

  • 成功了!谢谢。您能否简要解释一下为什么它不起作用而现在却起作用了?或指向参考...
  • 完美@MarcinOrlowski。比你!
【解决方案2】:

在您的 composer.json 文件中添加以下行:

"autoload": {
    "psr-4": {
        "Calcanotica\\": "src/"
    },

}, 

您需要在命名空间后添加\\,在src 后添加/。如需更多信息,请点击此处:https://getcomposer.org/doc/04-schema.md#psr-4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 2023-01-19
    • 2015-03-21
    相关资源
    最近更新 更多