laravel 扩展(扩展)/覆盖特定供应商包文件的正确方法

laravel proper way to extend(expand)/override specific vendor package file

我参与的项目composer require fengqi/hanzi进入了vendor文件夹,用于简体中文和繁体中文的转换

想看包的人https://github.com/fengqi/hanzi

在供应商文件夹中,包具有以下示例目录结构:

vendor/
--hanzi/
----src/
------Hanzi.php
------HanziDict.php
------Pinyin.php

我要修改的具体文件HanziDict.php有一个非常简单的代码结构:

<?php namespace fengqi\Hanzi;
  return array (
      '啊' => '啊',
       ...
       ...
       'sample char A'=>'sample char B'
 );

包的 github 存储库建议我可以在 php 文件中插入任何 "char C => char D" 如果我发现字典中缺少某些字符。

但我认为我不应该直接将代码放在 vendor 文件夹中,因为它会在更新后被覆盖。 所以,我的问题是如何在 Laravel 中正确地 override/extend 这个文件(比如将 "char C => char D" 插入到数组中)。

我已经阅读并知道如何在供应商文件夹之外正确扩展 class ,但没有找到任何关于其他类型的 php 文件的有用信息.我想知道是否有某些方法或规则可以处理此类文件。

理想情况下,我想实现如下目标: 在供应商文件夹之外,我有一个扩展的 ExtraHanziDict.php。所以它总是可以建立在供应商 dict.php 之上。

以下链接是供应商class代码(只有较少的简单函数读取字典和转换字符) https://github.com/fengqi/hanzi/blob/master/src/Hanzi.php(为抛出代码道歉)

不幸的是,在这种情况下,没有简单的方法来更改字典。正如您猜对的那样,您永远不应该更改 vendor 文件夹的内容,因为它没有提交给版本控制。 在您的具体情况下,您可以做的是:

  1. 要求存储库维护者添加一个 api 允许您在运行时添加新词典。
  2. 分叉存储库,更改您需要的内容,然后改用它(参见 )。如果您认为您的更改对其他人有用,请在原始存储库上打开拉取请求。
  3. 您链接的存储库没有太多逻辑。您添加到 composer.json 文件中的每个包都是一个负担,不属于您的代码,您必须盲目地强加(如果在某个时候存储库被黑客入侵并且其中隐藏了一些恶意代码怎么办?)。只需创建您自己的服务即可完成如此简单的任务。