3

在与 Composer 会面之前,我使用的是 Zend 的自动加载器。

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

如果我想将我的代码推送到服务器,我只需将我的 LibEx 文件library夹复制到 Zend 可自动加载的文件夹中。在 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文件夹下,如何仍然自动加载?

4

2 回答 2

4

你试过这个吗?

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

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

于 2012-11-16T20:16:23.823 回答
4

你可以加 :

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

对于您的 composer.json,这将考虑到全局 php 配置中定义的路径,并且您不必对完整路径进行硬编码。

于 2013-11-07T16:08:27.010 回答