php - 覆盖随 Composer 安装的库中的类的策略

标签 php codeigniter composer-php

我正在使用 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/

相关文章:

php - 使用 AJAX 将数据发送到数据库失败

php - Eloquent 模型批量更新

PHP 类 : Call a specific function everytime a method call is made

php - 删除在 Codeigniter 中无法与我的实时服务器一起使用的 index.php

php - Codeigniter 使 URL SEO 友好

php - 如何手动使用 composer, artisan ...(Laravel) php 命令

php - Composer创建项目错误

php - 在 PHP 中格式化 HTML 代码

php - Codeigniter 禁用缓存

php - 自定义包的 Composer 安装路径