如何覆盖供应商目录中的方法?

时间:2018-09-12 12:39:34

标签: php laravel overwrite

您知道,当您运行composer install时,将更新供应商目录中的所有文件夹/文件。因此,在其中修改代码是错误的做法。

此外,我需要修改DatabaseChannel名称空间(位于Illuminate\Notifications\Channels目录中)下的vendor。它有一个名为send的方法,我需要修改。

任何想法我该怎么做?我应该在哪个类中再次定义send方法并覆盖我的代码?是否应该使用与DatabaseChannel相同的新课程?我应该放在哪里?该类应该是从供应商目录中的类扩展的吗?我怎么能说编译器使用我定义的功能而不是供应商目录中定义的功能?

2 个答案:

答案 0 :(得分:1)

我真的不确定是否可以。但是你绝对不应该。 不仅您依赖供应商文件夹中的代码。可能还有许多其他依赖项。

如果确实需要,则应从要更改的包中创建一个fork。进行更改,然后将存储库添加到您的composer.json

"repositories": [
     {
         "type": "git",
         "url": "https://github.com/gjedeer/celery-php"
     }
],

然后,您可以像平常一样安装依赖项。

答案 1 :(得分:0)

您永远都不应覆盖供应商文件,而且这毫无用处。

我建议您创建一个新通道并使其扩展DatabaseChannel,然后可以覆盖该方法并使用新通道而不是旧通道。 refer to laravel docs to make a new channel

通过这种方式,您的课程将与软件包保持同步,并且不会造成混乱