已关闭。此问题需要details or clarity。它目前不接受回答。
**希望改进此问题?**通过editing this post添加详细信息并阐明问题。
19小时前关闭。
Improve this question的
问题总结。由于自定义作业的名称空间和软件包的作业的名称空间相同,我们不能覆盖已安装软件包的作业类。
假设有一个包含一些作业类的包,并且该包具有App\Jobs命名空间。安装在A服务和B服务中的软件包。现在包裹的作业在A服务中分派,它将在B服务中处理。在B服务中,我们创建了一个自定义作业来覆盖package作业的handler方法。但问题是由于自定义作业和包作业的命名空间相同,我们的自定义作业不能被调用来处理被调度的作业,而B服务使用包作业来处理。
1条答案
按热度按时间xzabzqsa1#
在Laravel中,您可以通过为自定义作业指定不同的命名空间来覆盖包的作业。这样,您可以避免与包的作业命名空间发生冲突,并确保使用自定义作业。以下是您的操作方法:
步骤1:创建自定义作业在B服务中,创建一个自定义作业,它扩展了要覆盖的包的作业类。请确保为自定义作业定义不同的命名空间。例如,假设包的作业类在
App\Jobs
命名空间下命名为PackageJob
。您可以像这样创建自定义作业:字符串
步骤2:分派自定义作业在A服务中,当从包分派作业时,请确保使用自定义作业的完全限定命名空间:
型
步骤3:注册自定义作业命名空间在B服务中,您需要注册自定义作业命名空间,以便Laravel可以找到您的自定义作业类。您可以在App\Providers\AppServiceProvider的map方法中执行此操作,或为其创建单独的服务提供程序:
型
通过这种设置,当作业在A服务中被分派并在B服务中被处理时,Laravel将在
App\Jobs\Custom
命名空间下查找自定义作业。如果它找到了自定义作业,它将使用它进行处理,您可以将自定义逻辑添加到handle方法中。如果它没有找到自定义作业,它将返回到包的作业。请记住,您需要确保
App\Providers\AppServiceProvider
已正确注册并加载到B服务中,以使自定义名称空间注册生效。