使用Composer和PHP全局包含路径

3

在遇到Composer之前,我使用Zend的自动加载器。

我有一个库(我们称其为LibEx),它位于PHP的全局包含路径(c:\xampp\php\pear)中。它必须位于全局包含文件夹中,因为许多项目都在使用它。因此,如果我更改了LibEx中的函数,则每个项目都可以访问最新版本。

如果我想将我的代码推送到服务器上,我只需将LibEx文件夹复制到可由Zend自动加载的library文件夹中。在使用Composer之前,我使用的是这种方法:

set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/library'),
    realpath(APPLICATION_PATH . '/library/Zend'),
    get_include_path(),
)));

include "Zend/Loader/Autoloader.php";
Zend_Loader_Autoloader::getInstance()->registerNamespace('LibEx');

现在我非常喜欢Composer。它真的很棒,而且我也可以使用它来自动加载我的项目专用库:
"autoload": {
    "psr-0": {"MyLib": "src/"}
}

但是,我该如何自动加载不在 DocumentRoot 或 WebRoot 中的 LibEx 文件夹?如果它在服务器上并被复制到 src 文件夹下,如何仍然自动加载?

2个回答

4

你试过这个吗?

"autoload": {
    "psr-0": {"MyLib": "c:\somewhere\project\src"}
}

在Linux上,软链接文件夹可能是一个可行的解决方案,但我不知道Windows是否支持这种方式。


它确实可以工作,但是在将LibEx复制到生产的src文件夹后,我应该执行“php composer.phar update”吗? - cnkt
如果LibEx兼容PSR-0,则另一种方法是执行以下操作:$loader = require __DIR__ . '/vendor/autoload.php'; $loader->add('LibEx', '/path/to/libex'); - Seldaek
@cnkt,我不明白你的问题 :( - Miro
好的,我用了较困难的方法解决了它。无论如何还是谢谢你,我接受了你的答案。 - cnkt

3
你可以添加:

"config": {
    "use-include-path": true
},

将以下代码添加到你的composer.json文件中,这将考虑全局PHP配置中定义的路径,你无需硬编码完整路径。
```json { "config": { "vendor-dir": "${HOME}/custom/path/to/vendor" } } ```

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接