composer包:如何要求供应商lib自动加载

时间:2015-07-31 08:50:47

标签: php composer-php autoload

我差不多一年前就我喜欢的作曲家包开了一个问题:jobby(它允许用PHP管理CRON任务):see issue

我对这个包的问题是作曲家供应商的lib是在一个名为BackgroundJob.php(see file)的文件中硬编码的

if (file_exists('vendor/autoload.php')) {
    require('vendor/autoload.php');
} else {
    require(dirname(dirname(dirname(dirname(dirname(__DIR__))))) . '/vendor/autoload.php');
}

但我的供应商目录不是"供应商"但是" php / lib"它不是可以讨厌的;)

我丑陋的解决方案是硬编码自动加载文件的路径,但每次安装lib时我都必须手动编辑BackgroundJob.php。

由于供应商lib可以是任何深度,我真的在徘徊什么是这个问题的好解决方案:显然,Jobby并不是唯一需要运行其他库的库。你能指点我一个处理它的图书馆,所以我可以看看它或给我你的想法吗?

由于

2 个答案:

答案 0 :(得分:0)

我认为没有干净的,没有好的解决方案来安装你自己不在vendor之外的另一个目录中的软件包,因为这是一个非常糟糕的主意。这是作曲家的设计!这是让作曲家很棒的一件事。有一个nice article关于为什么将软件包安装到vendor以外的目录中是个坏主意。

如果你有充分的理由不仅仅是"但我想..."你真的需要这样做(我建议不要这样做!)但是你可以用composer scripts做一些技巧。应该可以运行post-package-updatepost-package-install脚本将包从供应商移动到所需的目录。

但请记住,每个开发人员都会讨厌这样做。有vendor是第三方软件包的唯一目录的原因。这不仅仅是为了娱乐的限制。

答案 1 :(得分:0)

这是一个糟糕的解决方案,但要做到这一点:

fork that project =>改变代码=>制作自定义套餐

稍后,您可以安装自己的自定义程序包。