在与Composer会面之前,我正在使用Zend的自动加载器。
我有一个库(我们称之为LibEx),它位于PHP的全局包含路径(c:xamppphppear
)。它必须位于全局包含文件夹中,因为很多项目都使用它。因此,如果我更改 LibEx 中的函数,每个项目都可以访问最新版本。
如果我想将我的代码推送到服务器,我只需将我的 LibEx 文件夹复制到library
Zend 可自动加载的文件夹中。在作曲家之前,我使用这种方法:
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');
现在我爱上了作曲家。这真的很棒,我也可以用它自动加载我的项目特定库:
"autoload": {
"psr-0": {"MyLib": "src/"}
}
但是,如何自动加载不在DocumentRoot或WebRoot中的LibEx文件夹?即使它在服务器中并复制到src
文件夹下,如何仍然自动加载?
你试过这个吗?
"autoload": {
"psr-0": {"MyLib": "c:somewhereprojectsrc"}
}
在Linux软链接文件夹上将是一个可能的解决方案,我不知道Windows现在是否支持它。
您可以添加:
"config": {
"use-include-path": true
},
对于您的 composer.json,这将考虑全局 PHP 配置中定义的路径,并且您不必对完整路径进行硬编码。