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

问题描述 投票:1回答:2

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

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

知道我该怎么办?我应该在哪个类中再次定义send方法并覆盖我的代码?我应该创建一个与DatabaseChannel相同的新课程吗?我应该把它放在哪里?该类应该从供应商目录中扩展出来吗?我怎么能说编译器使用我定义的函数而不是在供应商目录中定义的函数?

php laravel overwrite
2个回答
1
投票

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

如果你真的想要,你应该从你想要改变的包中创建一个fork。进行更改,并将存储库添加到composer.json

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

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


0
投票

你永远不应该覆盖供应商文件,无论如何它都是无用的。

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

通过这种方式,您的课程将与包裹保持同步,并且不需要任何混乱

© www.soinside.com 2019 - 2024. All rights reserved.