首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Composer -需要我的包/包中的另一个包,但它不会自动加载。用另外两种方法解决,但还不够干净

Composer -需要我的包/包中的另一个包,但它不会自动加载。用另外两种方法解决,但还不够干净
EN

Stack Overflow用户
提问于 2014-10-15 03:55:37
回答 1查看 127关注 0票数 1

我正在使用Symfony 2.3和Composer,并使用Composer从远程存储库安装我的包。单靠它可以很好地工作,但我遇到的问题是,当我试图从我的Symfony2包中请求另一个包时。

我的包在src/文件夹中。

我已经将以下代码添加到我的包的composer.json中:

代码语言:javascript
复制
"require": {
    "rackspace/php-opencloud": "1.10.*"
},

一切都已安装,但我现在需要确保类是自动加载的(我想是注册名称空间),但它就是做不到这一点。

实际上,我已经用另外两种方法解决了这个问题,但它们还不够干净。我希望我的捆绑包处理依赖项,而不是应用程序文件夹或主Symfony2 composer.json。

不够好的解决方案:

(1)如果我将Rackspace包添加到symfony2/composer.json中,那么一切都会正常工作。但这很糟糕,因为依赖于我的捆绑包,而不是整个Symfony2框架。

(2)如果我将这些代码添加到app/autoload.php中,那么它也可以工作:

代码语言:javascript
复制
$loader->add('OpenCloud', __DIR__.'/../src/rackspace/php-opencloud/lib');
$loader->add('Guzzle\\Http', __DIR__.'/../src/guzzle/http');
$loader->add('Guzzle\\Common', __DIR__.'/../src/guzzle/common');

...but这很混乱,而且依赖于捆绑包而不是应用程序。

我已经尝试了它的各种变体(在我的捆绑包的composer.json中),但它就是不起作用:

代码语言:javascript
复制
"autoload": {
    "psr-0": { "OpenCloud": ["rackspace/php-opencloud/lib/", "rackspace/php-opencloud/tests/"] }
}
EN

回答 1

Stack Overflow用户

发布于 2014-10-15 04:12:37

通常,只需要相对路径。

代码语言:javascript
复制
"autoload": {
    "psr-0": { "OpenCloud": ["lib/", "tests/"] }
}

我没有对同一前缀的多个路径进行测试。这可能不受支持。

您也可以选择使用classmap autoloader,它将遍历整个文件夹并从它们生成静态映射。不需要前缀。

代码语言:javascript
复制
"autoload": {
    "classmap": ["lib/", "tests/"]
}

然而,我很少看到测试包含在外部应用程序的自动加载中。PHPUnit可以很好地处理类加载。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26369230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档