使用Composer与PHP全局包含路径

时间:2012-11-16 20:02:08

标签: php autoload composer-php

在与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 个答案:

答案 0 :(得分:4)

你试过这个吗?

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

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

答案 1 :(得分:4)

您可以添加:

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

到你的composer.json,这将考虑全局php配置中定义的路径,你不必硬编码完整路径。