Strategy to override a class in a library installed with Composer(覆盖使用 Composer 安装的库中的类的策略)
问题描述
我正在使用 Codeigniter 和 Composer.要求之一是 PHPExcel.现在我需要更改其中一个类中的函数.最好的策略应该是什么?我应该更改供应商文件夹中的代码吗?如果是这样,如何维护所有实例的更改?如果不是,我如何覆盖该特定类.虽然我提到了 PHPExcel,但我想要一个通用的解决方案.
I am using Codeigniter and Composer. One of the requirements is PHPExcel. Now I need to change a function in one of the classes. What should be the best strategy to do it? Should I change the code in the vendor folder? If so, how to maintain the change across all the instances? If not how do I override that particular class. Though I mention PHPExcel I would like a generic solution.
我不确定这是否是这个问题的正确论坛.如果不是,我将删除它.如果需要更多详细信息,请告诉我.
I am not sure if this is the right forum for this question. If not i will remove this. Please let me know if any more details are needed.
谢谢.
推荐答案
在composer.json的["autoload"]["psr-4"]下,添加一个以namespace为key、path为value的条目:
In composer.json, under ["autoload"]["psr-4"], add an entry with namespace as the key and path as the value:
{
"autoload": {
"psr-4": {
"BuggyVendor\Namespace\": "myfixes/BuggyVendor/Namespace"
}
}
}
在该路径下复制您要覆盖的文件(保留子命名空间目录结构)并在那里编辑它们.将优先选择它们,而不是库包的原始类路径".似乎以这种方式添加到 composer.json 的命名空间->路径映射在被必需包添加的映射之前被考虑.注意:我刚刚尝试过,它确实有效,但我不知道这是否是预期功能或可能的问题.
Copy files you want to override under that path (keeping sub-namespace directory structure) and edit them there. They will be picked in preference to the library package's original "classpath". It would seem that namespace->path mappings added to composer.json in this manner are considered before those added by required packages. Note: I just tried it and it worked, though I don't know if it is an intended feature or what possible gotchas are.
发现了一个问题.有时,当您随后使用 composer require vendor/package
需要另一个包时,您将丢失"覆盖.如果发生这种情况,您必须手动发出 composer dump-autoload
.这将恢复正确的自动加载顺序,以尊重您的覆盖.
found a gotcha. Sometimes when you subsequently require another package with composer require vendor/package
, you will "lose" the override. If this happens, you must issue composer dump-autoload
manually. This will restore the correct autoload order honoring your override.
这篇关于覆盖使用 Composer 安装的库中的类的策略的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:覆盖使用 Composer 安装的库中的类的策略
基础教程推荐
- WooCommerce 中选定产品类别的自定义产品价格后缀 2021-01-01
- 通过 PHP SoapClient 请求发送原始 XML 2021-01-01
- 在 Woocommerce 中根据运输方式和付款方式添加费用 2021-01-01
- 在 PHP 中强制下载文件 - 在 Joomla 框架内 2022-01-01
- mysqli_insert_id 是否有可能在高流量应用程序中返回 2021-01-01
- Libpuzzle 索引数百万张图片? 2022-01-01
- 如何在 PHP 中的请求之间持久化对象 2022-01-01
- 在多维数组中查找最大值 2021-01-01
- XAMPP 服务器不加载 CSS 文件 2022-01-01
- 超薄框架REST服务两次获得输出 2022-01-01