【问题标题】:Composer not auto-loading packageComposer 不自动加载包
【发布时间】:2013-06-16 05:05:32
【问题描述】:

我目前正在开发 Laravel 4。我已将以下内容添加到我的 composer.json,并运行了更新:

    "require": {
        ...
        "koraktor/steam-condenser": "*"

包裹:https://packagist.org/packages/koraktor/steam-condenser

我遇到的问题是,如果我调用它使用的类之一,例如:

$steamUser = new SteamId('000000000000000000');
echo "Welcome, " . $steamUser->getNickname() . "<br />";

我收到错误Class 'SteamId' not found

如果我手动需要所需的文件,那么它可以完美运行:

require_once('/home/path-to-laravel/laravel/vendor/koraktor/steam-condenser/lib/steam-condenser.php');

我已经运行了composer dump-autoload,但仍然无法正常工作。有人知道为什么吗?这真的让我很沮丧:(

【问题讨论】:

    标签: php laravel composer-php steam-condenser


    【解决方案1】:

    蒸汽冷凝器(尚)不符合 PSR-0,因此您必须使用不同的自动加载方法(请参阅 http://getcomposer.org/doc/04-schema.md#autoload)。

    使用files 方法应该最适合这里:

    {
        "autoload": {
            "files": ["vendor/koraktor/steam-condenser/lib/steam-condenser.php"]
        }
    }
    

    【讨论】:

    • Koraktor 工作正常!非常感谢您花时间研究它。
    • 其实classmap 可能是一个更好的解决方案。 files 只是强制加载文件,即使您不使用其中的类。另一方面,classmap 使自动加载器能够找到类并仅按需加载它们。
    • 嗯,看起来files确实是正确的选择。您正在加载的文件不仅会加载类,还包含它们所需的一些数据。
    【解决方案2】:

    只需要一个包,并不强制作曲家自动加载包。

    看看使用 composer 进行自动加载,但这些内容应该可以帮助您入门:

    autoload: {
        "classmap": ["vendor/koraktor/steam-condenso/lib"]
    }
    

    【讨论】:

    • 谢谢(虽然有错字)。不过我很困惑,我一直在使用的其他软件包(例如 HybridAuth)实际上是开箱即用的,不需要添加任何东西,但是我这样做了吗?它确实加载文件。但是我收到错误“使用未定义的常量 STEAM_CONDENSER_PATH - 假定为'STEAM_CONDENSER_PATH' - 我猜这是因为它没有加载定义它的文件。
    • 查看代码,看看这个定义发生在哪里,并确定它是否被加载。
    • 发生在“steam-condenser.php”文件中:define('STEAM_CONDENSER_PATH', dirname(FILE) . '/');所以我假设不是......但它在 /lib/ 目录中,这很奇怪!
    猜你喜欢
    • 2016-06-10
    • 2013-02-17
    • 2017-01-26
    • 2013-02-24
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多