我正在使用 Codeigniter 和 Composer。其中一项要求是 PHPExcel。现在我需要更改其中一个类中的函数。最好的策略应该是什么?我应该更改供应商文件夹中的代码吗?如果是这样,如何在所有实例中维护更改?如果不是,我该如何覆盖该特定类。虽然我提到了 PHPExcel,但我想要一个通用的解决方案。
我不确定这个论坛是否适合这个问题。如果没有,我会删除它。如果需要更多详细信息,请告诉我。
谢谢。
最佳答案
在 composer.json 中,在 ["autoload"]["psr-4"] 下,添加一个以命名空间为键,路径为值的条目:
{
"autoload": {
"psr-4": {
"BuggyVendor\\Namespace\\": "myfixes/BuggyVendor/Namespace"
}
}
}
在该路径下复制您想要覆盖的文件(保留子命名空间目录结构)并在那里编辑它们。将优先选择它们而不是库包的原始“类路径”。似乎以这种方式添加到 composer.json 的命名空间-> 路径映射被认为先于所需包添加的映射。注意:我刚刚尝试过它并且它起作用了,但我不知道它是否是预期的功能或可能的陷阱是什么。
编辑:发现一个陷阱。有时当您随后使用 composer require vendor/package
需要另一个包时,您将“丢失”覆盖。如果发生这种情况,您必须手动发出 composer dump-autoload
。这将恢复正确的自动加载顺序以兑现您的覆盖。
关于php - 覆盖随 Composer 安装的库中的类的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28104574/