在与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
文件夹下?
答案 0 :(得分:4)
你试过这个吗?
"autoload": {
"psr-0": {"MyLib": "c:\somewhere\project\src"}
}
在Linux上,软链接文件夹是一种可能的解决方案,我不知道Windows现在是否支持它。
答案 1 :(得分:4)
您可以添加:
"config": {
"use-include-path": true
},
到你的composer.json,这将考虑全局php配置中定义的路径,你不必硬编码完整路径。